erawan: Suche effizientere Auswertungsmöglichkeit für Datenbankabfrage

Beitrag lesen

Grüß euch,

ich bin gerade dabei ein Buchungsprogramm für unsere Theatervorführungen zusammenzustellen, bei dem die Besucher einen fix definierten Platz online reservieren können.

Folgende Problem bzw. Frage hat sich dabei ergeben (von der ich hoffe ihr könnt mir hier weiterhelfen):

in der Mysql Datenbank gibt es derzeit eine Table "reihe" die jeweils die Statuswerte von jeweils bis zu 20 Sitzplätzen enthält

Spaltenstruktur: id, terminid, nr, sitzanz (gibt an wieviele Sitze in dieser Reihe tatsächlich aufgestellt werden), sitz1, sitz2, sitz3, ... sitz20

Beispieldaten für sitz-Spalten
0 = frei
1 = bestellt
2 = verkauft
3 = anderweitig vergeben / nicht aufgestellt
...

nun möchte ich möglichst effizent abfragen
1. wieviele Sitze für einen bestimmten Termin insgesamt verfügbar sind (Werte 0-2)
2. wieviele Sitze sind noch bestellbar (Wert 0)

dazu muss ich ja erst mal alle Reihen zu dem Termin auslesen (kein Problem) und dann die jeweiligen Sitzwerte auswerten und zusammenzählen

lässt sich dies gleich über eine komplexere DB-Abfrage lösen oder ist es besser die Daten in ein Array zu laden und dieses dann abzufragen?

Nachfolgend meine derzeitige (wahrscheinlich nicht sehr elegante) Lösung um alle freien Sitze auszulesen:

  
   $results = mysql_query (  
    " SELECT reihe.id        AS reihe_id,        " .  
    "        reihe.nr        AS reihe_nr,        " .  
    "        reihe.text      AS reihe_text,      " .  
    "        reihe.sitzanz   AS reihe_sitzanz,   " .  
    "        reihe.sitz1     AS reihe_sitz1,     " .  
    "        reihe.sitz2     AS reihe_sitz2,     " .  
    "        reihe.sitz3     AS reihe_sitz3,     " .  
    "        reihe.sitz4     AS reihe_sitz4,     " .  
    "        reihe.sitz5     AS reihe_sitz5,     " .  
    "        reihe.sitz6     AS reihe_sitz6,     " .  
    "        reihe.sitz7     AS reihe_sitz7,     " .  
    "        reihe.sitz8     AS reihe_sitz8,     " .  
    "        reihe.sitz9     AS reihe_sitz9,     " .  
    "        reihe.sitz10    AS reihe_sitz10,    " .  
    "        reihe.sitz11    AS reihe_sitz11,    " .  
    "        reihe.sitz12    AS reihe_sitz12,    " .  
    "        reihe.sitz13    AS reihe_sitz13,    " .  
    "        reihe.sitz14    AS reihe_sitz14,    " .  
    "        reihe.sitz15    AS reihe_sitz15     " .  
    "   FROM reihe                               " .  
    "  WHERE reihe.termineid = '$veranstaltung'  " .  
    "  ORDER BY reihe.nr DESC                    " )  
  or die ( "Fehler in " . __FILE__ . " Zeile Nr. " . __LINE__ . " - " . mysql_error() );  
  
  $anz = 0;  
  
  while ( $line = mysql_fetch_array($results) ) {  
    include "inc/leseSqlResult.php";  
 for($i = $reihe_sitzanz; $i >= 1; $i--){  
      eval("\$sitz  = \$reihe_sitz".$i.";");  
   if($sitz == 0) $anz++;  
 }  
  }