Det problem, du har, er, at din forespørgsel ikke er tilstrækkelig robust. Når du nedbryder problemet, er det, du har, dette:
Hvis området defineret af $check_in og $check_out overlapper området defineret af checkin og checkout i enhver måde, så er værelset booket. Ellers er det gratis.
Det betyder, at:
- Hvis
$check_in>=checkinog$check_in<=checkout, værelset er BOOKET - ELLER Hvis
$check_out>=checkinog$check_out<=checkout, værelset er BOOKET - ELLER Hvis
$check_in<=checkinog$check_out>=checkout, værelset er BOOKET
Så du skal repræsentere begge disse scenarier i din underforespørgsel for at få den information, du leder efter.
Du vil forhåbentlig også bruge datetime for dine sammenligninger og ikke kun time , ellers vil du få bivirkninger.
EDIT:SQL-forespørgsel
(Husk på, at der er mere end én måde at flå en kat på, så at sige. Jeg giver bare et eksempel, der så meget som muligt holder med det, du allerede har. Endnu en gang går jeg også ud fra, at checkin , checkout , $check_in , og $check_out vil alle løses til datetime typer)
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'))