Проблемът, който имате, е, че вашата заявка не е достатъчно стабилна. Когато разбиете проблема, това, което имате, е следното:
Ако диапазонът, дефиниран от $check_in
и $check_out
припокрива диапазона, дефиниран от checkin
и checkout
в всяко начин, тогава стаята е резервирана. В противен случай е безплатно.
Това означава, че:
- Ако
$check_in
>=checkin
и$check_in
<=checkout
, стаята е зарезервирана - ИЛИ Ако
$check_out
>=checkin
и$check_out
<=checkout
, стаята е зарезервирана - ИЛИ Ако
$check_in
<=checkin
и$check_out
>=checkout
, стаята е зарезервирана
Така че трябва да представите и двата сценария във вашата подзаявка, за да получите информацията, която търсите.
Също така се надяваме, че ще използвате datetime
за вашите сравнения, а не само time
, в противен случай ще имате странични ефекти.
РЕДАКТИРАНЕ:SQL заявка
(Имайте предвид, че има повече от един начин да одирате котка, така да се каже. Просто давам пример, който се съобразява с това, което вече имате, доколкото е възможно. Още веднъж също предполагам, че checkin
, checkout
, $check_in
и $check_out
всичко ще се разреши до datetime
видове)
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'))