mysql abfrage

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
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)
xturbo77
User
Beiträge: 39
Registriert: Montag 9. September 2002, 20:05
Kontaktdaten:

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? :?
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

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
xturbo77
User
Beiträge: 39
Registriert: Montag 9. September 2002, 20:05
Kontaktdaten:

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
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 ?
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

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
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

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
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
Antworten