MySQL Wie Reservierungen zwischen zwei Daten auslesen?

Skhoney

SMS-Change.de
ID: 67036
L
2 Mai 2006
624
22
Hallo,

ich hoffe ihr könnt mir helfen - Folgendes Problem: Ich baue an einer Buchung und habe in einer Tabelle abgespeichert wann der Gegenstand Reseriviert ist (buchung_ab_datum und buchung_bis_datum als Datetime). Wenn jetzt eine neue Reservierung gemacht wird, soll geprüft werden ob das neue Datum eines der alten Reservierungen anschneidet oder eben im selben Zeitraum ist.

Code:
buchung_ab_datum BETWEEN '2014-02-19 12:00:00' AND '2014-02-19  15:00:00' AND buchung_bis_datum BETWEEN '2014-02-19 15:00:00' AND  '2014-02-19 15:00:00'

hatte ich erst und funktioniert auch halbwegs, nur wenn es das Datum nicht genau dazwischen liegt, weil es den Tag überragt, wird es als nicht reserviert angezeigt.

Beispiel:
in meiner Datenbank habe ich eine Reservierung vom (2014-02-19 12:00:00 - 2014-02-20 12:00:00) und jetzt will ich checken ob der Gegenstand verfügbar ist mit den Daten der neuen Reservierung (2014-02-19 18:00:00 - 2014-02-19 20:00:00) hier greift BETWEEN nicht mehr...

Mit was für einer Abfrage bekomme ich raus, ob der Gegenstand reserviert ist oder nicht?

Danke schon mal :)
 
Zuletzt bearbeitet von einem Moderator:
Die Zeiträume der einzelnen Resevierungen dürfen sich nicht überschneiden:

FREI = Ende[2] < Anfang[1] ODER Anfang[2] > ENDE[1]
 
Code:
buchung_ab_datum BETWEEN :buchungStart AND :buchungEnd # neue Buchung schneidet Buchungsanfang einer bestehenden Buchung
OR
buchung_bis_datum BETWEEN :buchungStart AND :buchungEnd # neue Buchung schneidet Buchungsende einer bestehenden Buchung
OR
(:buchungStart BETWEEN buchung_ab_datum AND buchung_bis_datum AND :buchungStart BETWEEN buchung_ab_datum AND buchung_bis_datum) # neue Buchung liegt genau innerhalb bestehender Buchung
 
Da stimmt was nicht:: (Zeile 5) buchungStart BETWEEN ... AND buchungStart BETWEEN ... ???
Doch wohl eher buchungStart BETWEEN ... AND buchungEND BETWEEN ...
 
Zuletzt bearbeitet: