Theorie: Buchungssystem / PHP 4.x / MySQL

Mofu

Grünschnabel
Hallo,

ich habe einmal hier eine theoretische Problemstellung wofür ich einen neuen/besseren
Lösungsansatz suche - daher möchte ich um eure Mithilfe / Ideen bitten.

Auftrag (abgeschlossen) war, ein Buchungssystem zu entwickeln, das eine automatische
Belegung/Buchung inkl. visueller Darstellung (Ganzjahreskalender) der belegten Zeiten
für frei definierbare Objekte (in dem Fall Ferienwohnungen) ermöglicht.
Ferner sollte bei einer Buchungsanfrage direkt gegengefragt werden, ob für
diesen gewünschten Zeitrahmen bereits eine Belegung vorliegt. Wichtig ist hierbei zu erwähnen,
das eine Buchung z.B. für den Zeitraum 13.04 - 15.04 automatisch auch eine
Buchung für z.B. 10.04 - 13.04 zulassen muß, da hierbei der 13.04 als An-/Abreisetag
gewertet werden muß.
Ich habe dieses Projekt mit PHP 4.x sowie MySQL realisiert, indem ich das jeweilige
Start-/Enddatum als Timestamp speichere.
Bei einer Buchungsanfrage teste ich nun ob, der eingegebene Zeitraum innerhalb
der zwei Timestamps liegt. Diese Abfrage habe ich über BETWEEN gelöst.
Hinsichtlich des Ganzjahreskalenders viel mir leider auf die Schnelle nicht eine
bessere Lösung ein, als bei dem erstmaligem Aufruf die 365 Tage einzeln gegenzuprüfen
um somit eine statische HTML-Seite zu generieren.
Leider erzeugt dieser Vorgang pro Aufruf oder bei Änderung immer wieder über 400
MySQL-Abfragen, was bei aller Liebe sicher nicht sehr sinnvoll ist.

Meine Frage (nach dieser langen, langen, langen) Erklährung:
Wie würdet Ihr dieses Problem (Einzelüberprüfung wie auch Ganzjahreskalender im Hinblick auf bessere Performence) lösen ?
War mein Denkansatz mit den zweit Timestamps falsch ?

Gruss
Mofu
 
Die lange,lange Erklärung reicht mir leider nich ;)
Deswegen noch ein, zwei Fragen dazu.
Fragst du bei einem Buchungsvorgang alle Ferienwohnungen ab?
Wenn ja verwendest du indexe?

Desweiteren wäre hilfreich wenn du die verschiedenen Tabellen und Verknüpfungen aufführst
und mal eine Abfrage/Funktion zur Abfrage postest um zu erkennen wozu du 400 Abfragen brauchst.

mfg
 
Die lange,lange Erklärung reicht mir leider nich ;)
Deswegen noch ein, zwei Fragen dazu.
Fragst du bei einem Buchungsvorgang alle Ferienwohnungen ab?
Wenn ja verwendest du indexe?
Desweiteren wäre hilfreich wenn du die verschiedenen Tabellen und Verknüpfungen aufführst
und mal eine Abfrage/Funktion zur Abfrage postest um zu erkennen wozu du 400 Abfragen brauchst.
mfg

Hallo C K,

sorry für die verspätete Rückmeldung, ging aber leider nicht eher.
Bei einem Buchungsvorgang frage ich nur die Buchungseinträge zu der jeweils ausgesuchten Ferienwohnung ab.
Derzeit ist das ganze über mehrere Tabellen (ferienwohnungen, buchungen, user usw.)
realisiert. Diese Abfrage erfolgt mittels BETWEEN, indem ich die Anzahl der Datensätze erhalte, wo der Buchungsstart oder das Buchungsende zwischen den bereits belegten Timestamps liegt - leider musste ich hierbei gestern feststellen, das dieses auch nicht unbedingt unter jeder php-Version das gewünschte Ergebnis bringt, wobei dieses Problem aber nicht vorrangig ist.
Kernproblem ist die (bessere) Umsetzung hinsichtlich des Belegungskalenders.
Hierbei gehe ich derzeit wie folgt vor:
- Feststellung des jeweiligen Tages in dem Kalender (ganzes Jahr = 365 Tage)
- Abfrage ob an diesem Tag eine Belegung exisitiert (wieder mit BETWEEN)
- Falls Belegung: Festellung ob Start- oder Endtag
- Falls Start- oder Endtag entsprechend Tag kennzeichnen
- Entsprechende Darstellung dieses Tages (Frei, Besetzt, Starttag oder Endtag)
Durch diese ganze Prozedur erzeuge ich minimum 365 Abfragen (wenn keine Belegung für dieses Angebot in dem gewähltem Jahr vorliegt), bei aber z.B. 10 belegten Zeiträumen schnellt dieser Wert nochmals (durch die zusätzlichen Abfragen) nach oben.

Die Tabellenstruktur derzeit:
db_angebote
- id (inkrement/primär)
- name
- usw..

db_buchungen
- id (inkrement/primär)
- angebot_id
- buchungsstart
- buchungsende

Für kleine Sites mit 1-2 Angeboten und wenig BU-Vorgängen kann man diese Lösung nehmen, aber bei größeren Sachen schieß ich mir so den Server ab...

Gruss
Mofu
 
Zurück