В настоящее время я работаю в службе бронирования отелей, и я хочу показать все свободные номера для определенного типа номера и отеля в течение определенного периода времени. Я нашел то, что, казалось, было рабочим запросом, пока не заметил, что: если в комнате нет каких-либо оговорок, это не сработает.SQL для поиска свободных номеров в течение определенного периода времени
SELECT DISTINCT r.id,
r.num,
r.NAME,
h.NAME,
h.city,
h.country
FROM room r
JOIN hotel h
ON r.hotel_id = h.id
JOIN room_type rt
ON r.room_type_id = rt.id
WHERE r.id NOT IN (SELECT room_id
FROM reservation
WHERE ('$from' BETWEEN start_date AND end_date)
OR (start_date BETWEEN '$from' AND '$to')
OR '$from' = start_date)
AND $roomtype = rt.id
AND $hotel = h.id
Этот запрос будет использоваться в PHP скрипт, где «$ от» выбрана пользователя начало срока резервирования и $ в это конец резервирования и т.д.
Есть ли способ, чтобы сделать этот запрос работать, даже если в комнате нет оговорок? Любая помощь очень ценится!
Большое спасибо за такой быстрый ответ. Я применил вашу логику, и теперь она работает правильно! Также имеет смысл проверить rt.id и r.id перед подзапросом. Благодаря :) – heap1