Problém, který máte, je ten, že váš dotaz není dostatečně robustní. Když problém rozeberete, máte toto:
Pokud je rozsah definovaný $check_in
a $check_out
překrývá rozsah definovaný checkin
a checkout
v jakémkoli způsobem, pak je pokoj rezervován. Jinak je zdarma.
To znamená, že:
- Pokud
$check_in
>=checkin
a$check_in
<=checkout
, pokoj je REZERVOVÁN - NEBO Pokud
$check_out
>=checkin
a$check_out
<=checkout
, pokoj je REZERVOVÁN - NEBO Pokud
$check_in
<=checkin
a$check_out
>=checkout
, pokoj je REZERVOVÁN
Abyste tedy získali informace, které hledáte, musíte ve svém dílčím dotazu zastoupit oba tyto scénáře.
Také doufejme, že budete používat datetime
pro vaše srovnání a nejen pro time
, jinak budete mít vedlejší účinky.
UPRAVIT:SQL dotaz
(Mějte na paměti, že existuje více než jeden způsob, jak stáhnout kočku, abych tak řekl. Uvádím pouze příklad, který co nejvíce odpovídá tomu, co již máte. Znovu také předpokládám, že checkin
, checkout
, $check_in
a $check_out
se vše převede na datetime
typy)
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'))