Het probleem dat u ondervindt, is dat uw query niet robuust genoeg is. Als je het probleem oplost, heb je dit:
Als het bereik gedefinieerd door $check_in
en $check_out
overlapt het bereik gedefinieerd door checkin
en checkout
in elke manier, dan is de kamer geboekt. Anders is het gratis.
Dit betekent dat:
- Als
$check_in
>=checkin
en$check_in
<=checkout
, de kamer is GEBOEKT - OF Als
$check_out
>=checkin
en$check_out
<=checkout
, de kamer is GEBOEKT - OF Als
$check_in
<=checkin
en$check_out
>=checkout
, de kamer is GEBOEKT
U moet dus beide scenario's in uw subquery weergeven om de informatie te krijgen waarnaar u op zoek bent.
Hopelijk gebruikt u ook datetime
voor uw vergelijkingen en niet alleen time
, anders krijgt u bijwerkingen.
BEWERK:SQL-query
(Houd er rekening mee dat er meer dan één manier is om een kat te villen, om zo te zeggen. Ik geef slechts een voorbeeld dat zoveel mogelijk aansluit bij wat je al hebt. Nogmaals, ik neem ook aan dat checkin
, checkout
, $check_in
, en $check_out
zullen allemaal oplossen naar datetime
soorten)
SELECT *
FROM room
WHERE room_id NOT IN
(SELECT room_id
FROM bookings
WHERE
(checkin <= '$check_in' AND checkout >= '$check_in') OR
(checkin <= '$check_out' AND checkout >= '$check_out') OR
(checkin >= '$check_in' AND checkout <= '$check_out'))