У меня есть приложение для бронирования номеров в отелях, которое в основном основано на таблицах ниже.
Моя таблица бронирования,
`id`
`category`
`booking_no`
`room_id`
`date`
`guest_id`
`status`
Таблица моих комнат
`id`
`room_type_id`
`room_no`
`booking_no`
`blocked_from`
`blocked_to`
`status`
Моя таблица типов комнат
`id`
`category`
`name`
`status`
Моя таблица check_inout
`id`
`booking_no`
`room_id`
`guest_id`
`date`
`inout_status`
`status`
В настоящее время я использую запрос ниже, чтобы выбрать свободные номера, в которые можно добавить бронирование. Этот запрос работает отлично, и я могу получить то, что я хочу.
$query = "
SELECT r.room_type_id
, r.id room_id
, r.room_no
, t.name room_type_name
FROM rooms r
JOIN room_types t
ON t.id = r.room_type_id
WHERE r.id NOT IN
( SELECT room_id
FROM reservations
WHERE (date >='$checkin'
AND date <'$checkout')
AND category = 'Accommodation'
AND status=1)
AND t.category = 'Accommodation'
AND r.status <> 7
AND (r.blocked_from > '$checkout'
OR r.blocked_to < '$checkin'
OR r.blocked_to IS NULL
OR r.blocked_from IS NULL)
ORDER
BY r.room_type_id
, r.room_no ASC
";
Кроме того, когда гость регистрируется в комнате, я вставляю этот статус в таблицу check_inout со статусом 1 для inout_status feild. И когда он проверяет, я вставляю статус 2 для поля inout_status. Кроме того, я обновляю номер бронирования для определенного номера в таблице номеров при регистрации, а затем удаляю его при оформлении заказа.
Проблема:
Если один гость зарезервирует номер на 1 день, и если он выехал в тот же день (например: гость зарегистрировался в 13:00 ~ выехал в 18:00 того же дня), то комната должна быть доступна для другого гостя, чтобы проверить- в.
К сожалению, я не могу получить это, используя мою структуру таблицы выше. Потому что я проверяю доступность в соответствии с таблицей бронирования, используя запрос выше.
Помогите, если кто-то может найти способ получить его, связав таблицу check_inout , поскольку в ней есть записи о проверке и проверке для всех комнат.
MySQL, скрипка здесь http://sqlfiddle.com/#!9/e4747/2
В результате я тоже хочу получить 204 комнаты, но не знаю, как ее получить.