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>=checkinen$check_in<=checkout, de kamer is GEBOEKT - OF Als
$check_out>=checkinen$check_out<=checkout, de kamer is GEBOEKT - OF Als
$check_in<=checkinen$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'))