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.
rogen

mysql abfrage

Beitragvon rogen » Montag 15. September 2003, 12:28

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:

Beitragvon xturbo77 » Montag 15. September 2003, 13:29

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

Beitragvon Dookie » Montag 15. September 2003, 13:31

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:

Beitragvon xturbo77 » Montag 15. September 2003, 14:33

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

Beitragvon Gast » Montag 15. September 2003, 16:57

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

Beitragvon Dookie » Montag 15. September 2003, 18:11

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

Beitragvon Dookie » Dienstag 16. September 2003, 13:13

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

danke

Beitragvon rogen » Dienstag 16. September 2003, 15:23

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

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]