Seite 1 von 1
mysql abfrage
Verfasst: Montag 15. September 2003, 12:28
von rogen
ich schreibe mir einen zimmerplan unter python
jetzt möchte ich eine mysql abfrage starten ob ich überbuche.
und zwar gibt es 3 möglichkeiten
---------------------------------------------------------------
ankunft ----------------- abreise
1.ankunft ------- abreise
2. ankunft --------- abreise
3. ankunft ---- abreise
---------------------------------------------------------------
das problem ist dass ich 3 abfragen unter einem mysql satz starten möchte
p.s die abfrage hat 2 werte (ankunft + abreise)
Verfasst: Montag 15. September 2003, 13:29
von xturbo77
Sorry, mir ist der Sachverhalt nicht klar.
Du hast also eine Tabelle mit den Datumsfeldern "Ankunft" und "Abreise"? Und was möchtest du nun genau Abfragen?

Verfasst: Montag 15. September 2003, 13:31
von Dookie
Hi rogen,
hmm nen bisschen mager die Infos, wie schaut die Tabelle aus, in der die Reservierungen (Ankunft/Abreise) gespeichert sind?
Direkt in Python würd ich es wohl so machen:
Code: Alles auswählen
def Frei(ankunft, abreise, reservierungen):
belegt = 0
for reservierung in reservierungen:
if ( (reservierung["ankunft"] < ankunft < reservierung["abreise"]) and
(reservierung["ankunft"] < abreise < reservierung["abreise"])):
belegt += 1
return belegt
das schaut nach, ob sich der Reservierungszeitruam mit vorhandenen Reservierungen überschneidet und zählt diese Überschneidungen. "reservierungen" ist eine Liste mit Dictionaries mit den Schlüsseln "ankunft" und "abreise"
Code: Alles auswählen
reservierungen = [
{"ankunft": (2003,10,20), "abreise": (2003, 10, 23)},
"ankunft": (2003,11,01), "abreise": (2003, 11,07)},
...
]
Gruß
Dookie
Verfasst: Montag 15. September 2003, 14:33
von xturbo77
Ach, es geht um zeitliche Überschneidungen?
Das ginge mit SQL doch recht leicht, oder?
Code: Alles auswählen
SELECT * from Tabelle WHERE Anreise <= $Datum AND $Datum <= Abreise
wobei $Datum für die Variable steht die du auf Konflikte prüfen möchtest. Gibt die Abfrage Einen oder mehr Sätze zurück, gibt es einen Konflikt. Mit SELECT COUNT könntest du sogar die Anzahl der Konflikte rausfinden
Verfasst: Montag 15. September 2003, 16:57
von Gast
ja zeitliche überschneidung aber es gibt ja 3 varianten
select * from tabelle WHERE ankunft >= $ankunft and ankunft <= $abreise
select * from tabelle WHERE ankunft <= $ankunft and abreisee >= $abreise
select * from tabelle WHERE abreise >= $ankunft and abreise <= $abreise
die unter einen select satz zusammenfügen ?
Verfasst: Montag 15. September 2003, 18:11
von Dookie
ist ja eigentlich keine Pythonfrage, aber verknüpfe doch die Bedingungen.
Code: Alles auswählen
select * from tabelle WHERE ((ankunft >= $ankunft and ankunft <= $abreise) or
(ankunft <= $ankunft and abreise >= $abreise) or
(abreise >= $ankunft and abreise <= $abreise))
nicht getestet! aber sollte gehen
Dookie
Verfasst: Dienstag 16. September 2003, 13:13
von Dookie
man könnte das auch noch vereinfachen, Indem man überprüft ob
nicht $ankunft und $abreise beide vor oder nach dem Eintrag sind.
Code: Alles auswählen
select * from tabelle WHERE not (($ankunft < ankunft and $abreise < ankunft) or ($ankunft > abreise and $abreise > abreise))
oder ganz einfach da ankunft immer < abreise
Code: Alles auswählen
select * from tabelle WHERE not ($abreise < ankunft or $ankunft > abreise)
Gruß
Dookie
danke
Verfasst: Dienstag 16. September 2003, 15:23
von rogen
ja das funktioniert
super danke
p.s. ich weiss dass das keine python frage ist
aber ich programmiere zurzeit einen Zimmerplan (hotel)
unter python .
wenn ich fertig bin stelle das projekt vor