KlausP: MySQL Abfrage Between zwei Datumsfeldern

Guten Morgen,

ich brauche bitte mal einen Tipp von euch:

Ich habe eine Tabelle für einen Belegungsplan (id, anreise (date), abreise (date)).

Beispiel für einen Datensatz:
id = 1
anreise = 2014-07-09
abreise = 2014-07-31

Nun möchte ich beim Eintragen neuer Buchungen eine Überschneidung vermeiden und Frage daher wie folgt die DB ab:

  
SELECT id FROM `tabelle` WHERE (`anreise` BETWEEN '2014-07-09' AND '2014-07-31') || (`abreise` BETWEEN '2014-07-09' AND '2014-07-31')  

Wenn ein Datensatz gefunden wird breche ich den INSERT ab und gebe eine Fehlermeldung aus.

Das Problem ist, dass z.B. der 2014-07-31 ein Abreisetag ist, aber auch ein Anreisetag sein kann. Gleiches gilt z.B. auch für den 2014-08-10:

id = 1
anreise = 2014-07-31
abreise = 2014-08-10

Nur die Tage "zwischen" dem Anreisetag und dem Abreisetag können keine An- und Abreisetage sein.

Hat jemand eine Idee wie ich meine "Sicherheitsabfrage" erwidern/umstellen muss?

Vielen Dank, Klaus

  1. Hello,

      
    SELECT id FROM `tabelle`  
        WHERE (`anreise` BETWEEN '2014-07-09' AND '2014-07-31')  
           || (`abreise` BETWEEN '2014-07-09' AND '2014-07-31')  
      
    
    

    Was willst Du denn nun eigentlich wissen?

    --------------------                       ist verboten
             -------------------

    ----------------  ---------------------    ist erlaubt

    Wenn es das ist, steig bitte mal ins Archiv. Das Thema wurde hier schon behandelt.

    Suche: "Belegungsplan"

    Ein Treffer zum Einsieg: http://forum.de.selfhtml.org/archiv/2010/11/t201483/#m1359261
    Musst dann den Links im Thread in die Vergangenheit folgen.

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    Die ultimative Seite für Selbermacher
  2. Das Problem ist, dass z.B. der 2014-07-31 ein Abreisetag ist, aber auch ein Anreisetag sein kann.

    Das löst du indem du bei den Vergleichen die Gleichheit von Anreisetag der einen Buchung mit dem Abreisetag der anderen erlaubst.

    Nur die Tage "zwischen" dem Anreisetag und dem Abreisetag können keine An- und Abreisetage sein.

    Stimmt. Ist aber völlig egal :-) Es geht ja nicht drum wie die Tage heißen sondern dass zwischen den beiden Tagen keine andere Buchung liegt.

    Mals dir auf. Ich komme auf 6 Konstallationen wie die An/Abreise einer Buchung mit einem Vergleichszeitraum liegen kann.

    • Buchung komplett vor dem Zeitraum: ok
    • Buchung beginnt vor dem Zeitraum und endet im Zeitraum: nicht ok
    • Buchung beginnt vor dem Zeitraum und endet danach: nicht ok
    • Buchung beginnt im Zeitraum und endet auch in ihm: nicht ok
    • Buchung beginnt im Zeitraum und endet danach: nicht ok
    • Buchung komplett nach dem Zeitraum: ok

    Diese Fällt musst du abprüfen. Einfacher wäre es wahrscheinlich wenn du die beiden ok Fälle nimmst und davon dann "NICHT" bildest.