Suche effizientere Auswertungsmöglichkeit für Datenbankabfrage
erawan
- programmiertechnik
0 LX- datenbank
0 erawan
0 FraFu
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++;
}
}
Hallo!
Es wäre vielleicht insgesamt sinnvoller gewesen, die Reihe als Attribut des Sitzes zu speichern und alle Sitze in eine Tabelle zu packen.
Gruß, LX
Es wäre vielleicht insgesamt sinnvoller gewesen, die Reihe als Attribut des Sitzes zu speichern und alle Sitze in eine Tabelle zu packen.
ok da habe ich anscheinend vor lauter bäumen den wald nicht mehr gesehen. stimmt natürlich bringt aber leider eine Menge Umprogrammierungsarbeit mit sich. Die Abfrage ist dann dafür aber einfacher.
Ok Danke für die Hinweise.
Lg erawan
Hallo!
nun möchte ich möglichst effizent abfragen
" reihe.sitz1 AS reihe_sitz1, " .
" reihe.sitz2 AS reihe_sitz2, " .
" reihe.sitz3 AS reihe_sitz3, " .
Eine elgante Lösung verhindert vermutlich leider schon dein Datenbankansatz. Ich würde das DB Design insofertn verändern, als es eine Tabelle reihe(id, nummer, name) hat und dann eine tabelle platz(id, reihe_id) machen. Damit läßt sich das sicher eleganter lösen.
mfg
frafu