Il problema che stai riscontrando è che la tua query non è sufficientemente robusta. Quando risolvi il problema, quello che hai è questo:
Se l'intervallo definito da $check_in
e $check_out
si sovrappone all'intervallo definito da checkin
e checkout
in qualsiasi modo, quindi la stanza è prenotata. In caso contrario, è gratuito.
Ciò significa che:
- Se
$check_in
>=checkin
e$check_in
<=checkout
, la camera è PRENOTATA - O Se
$check_out
>=checkin
e$check_out
<=checkout
, la camera è PRENOTATA - O Se
$check_in
<=checkin
e$check_out
>=checkout
, la camera è PRENOTATA
Quindi, devi rappresentare entrambi questi scenari nella tua sottoquery per ottenere le informazioni che stai cercando.
Inoltre, si spera che utilizzerai datetime
per i tuoi confronti e non solo time
, altrimenti avrai effetti collaterali.
EDIT:query SQL
(Tieni presente che c'è più di un modo per scuoiare un gatto, per così dire. Sto solo fornendo un esempio che tiene il più possibile ciò che hai già. Ancora una volta, presumo anche che checkin
, checkout
, $check_in
e $check_out
si risolveranno tutti in datetime
tipi)
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'))