Ich versuche, eine Abfrage zu erstellen, die verfügbaren Hotels zwischen Check-in und Check-out-Daten zeigt. Auch wenn ich für bestimmte Zimmer reserviere, setze ich ihre Buchungsspalte auf 1. Das heißt, wenn das Checkout-Datum im wirklichen Leben kommt, wird eine Triggerfunktion die gebuchte Spalte als 0 setzen.Mysql Abfrage Suche nach Daten
Wenn alle Räume von a Hotel gebucht (gebucht = 1) und Check-in-Checkout-Daten dieser Zimmer sind bestimmte Datum (Check-in-Checkout-Eingänge), dann nicht das Hotel in der Liste. Meine Abfrage zeigt nicht das gewünschte Ergebnis an.
Abfrage: Eingaben: Land (Staat), Ein- und Auschecken.
SELECT DISTINCT a.* FROM accommodation a INNER JOIN cb_states s ON a.state = s.id
INNER JOIN accommodation_rooms ar ON a.id = ar.accommodation
WHERE state = 1 AND a.id NOT IN
(
SELECT 1 FROM booking b
WHERE
(
(b.arrival_date BETWEEN '2017-11-16' AND '2018-03-16')
OR
(b.departure_date BETWEEN '2017-11-16' AND '2018-03-16')
)
)
Wenn ich die Abfrage ausführen, zeigt es immer alle Hotels, egal Daten. Wenn ich schreibe ... WHERE ar.booked = 0 AND state = 1 AND a.id NOT IN...
, dann zeigt es nicht Unterkunft ID 13, aber es zeigt auch nicht, wenn ich Daten ändern.
booked_rooms Tabelle: (hat Fremdschlüssel mit Buchungs Tabelle)
Was könnte die beste Logik für meine Situation sein? –
@MalenaT. . . Dies hat die Logik behoben. Das '<=' anstelle von 'between' findet * any * überlappt sich. –
Ich sehe. Danke, 'b. ?? = br. ?? 'hier schrieb ich' b.id = br.booking' und es zeigt immer noch ein falsches Ergebnis. Außerdem verband ich Unterkunftszimmer mit gebuchten Zimmern in Unterabfrage '..... JOIN booked_rooms br ON bid = br.booking JOIN accommodation_rooms aar ON br.room = aar.id', es zeigt wieder ein falsches Ergebnis. –