Mailinglisten-Archive |
Hi Stephan, Stephan schrieb: > Momentan programmiere ich einen Belegungskalender für ein kleines > Hotel. > Dieser Kalender greift auf Buchungsdatensätze in einer Tabelle > 'zimmerbelegung' zurück. > Die Tabelle 'zimmerbelegung' ist wie folgt aufgebaut. > > --------------------------------- > | id | zimmernummer | von | bis | > --------------------------------- > > Die Felder 'id' und 'zimmernummer' sind integer. > Die Felder 'von' und 'bis' beinhalten einen Unix - Zeitstempel. > > Folgendes Problem habe ich. > Um festzustellen, wie ein Zimmer im betreffenden Kalendermonat belegt > ist habe ich folgende Abfrage. > > // folgende Zimmer stehen zur Verfügung > $zimmer[0] = 101; > $zimmer[1] = 102; > $zimmer[2] = 103; > > ... > > // Anzahl der Tage im Monat > $anzahl = date("t", mktime(0, 0, 0, 2, 1, 2005)); > > // Abfrage der Zimmerbelegung > for($i = 0; $i < count($zimmer); $i++){ > for($j = 1; $j <= $anzahl; $j++ ){ > $jetzt = mktime(0,0,0,2,$j,2005); > $sql = "select count(id) as treffer from zimmerbelegung where von > < '".$jetzt."' and bis > '".$jetzt."' and zimmernummer '".$zimmer[$i]."'"; > } > } > > Die Abfrage bezieht sich in diesem Beispiel nur auf den laufenden > Monat. Das Problem besteht darin das für jedes Zimmer und jeder Tag > des Monats eine Abfrage an die Datenbank generiert wird. > Also bei 30 Zimmern und 30 Kalendertagen des Monats immerhin 900 > Abfragen. > Gibt es eine elegantere Möglichkeit um diese Abfrage zu realisieren. Ja. Hole alle Daten auf einmal und verlagere diese Ausleselogik von SQL weg, ganz hin zu PHP. Bei "von" und "bis" fragst Du dann nicht auf den Tag ab, sondern auf den Monat bzw. auf einen 30-Tage-Zeitraum. Und bei "zimmernummer" übergibst Du der Datenbank einen Array mit den gesuchten Zimmernummern. Damit bekommst Du alle benötigten Daten mit einer SQL-Abfrage. Den Rest erledigst Du alleine mit PHP. Viele Grüße Lutz
php::bar PHP Wiki - Listenarchive