У меня была эта структура базы данных в резервации гостиницы с точки зрения доступности номера
ниже мой стол room
room_num roomtype 101 Single 102 Single 103 Single 111 Deluxe 112 Deluxe 113 Deluxe 114 Deluxe 115 Deluxe 116 Deluxe 121 Superior 122 Superior
и таблица ниже – room_booked
которая представляет собой номера забронированных номеров
dor
– дата регистрации, а dco
– дата проверки
room_num dor dco 111 2014-06-01 2014-06-06 112 2014-06-01 2014-06-06 113 2014-06-01 2014-06-06 114 2014-06-01 2014-06-06 115 2014-06-01 2014-06-06 116 2014-06-01 2014-06-06 112 2014-05-18 2014-05-21 113 2014-08-01 2014-08-04
В этом случае все номера Делюкс забронированы с 2014-06-01
по 2014-06-06
. Затем я выбрал номер Делюкс, доступный с 2014-06-01 по 2014-06-06, используя этот код MySQL ниже
SELECT room.room_num FROM room LEFT JOIN room_booked ON room_booked.room_num = room.room_num WHERE ( ( dor IS NULL AND dco IS NULL ) OR ( -- wished booking date is before DOR '2014-06-06' < dor -- OR wished booking date is after DCO OR '2014-06-01' >= dco ) ) -- room type AND roomtype = 'Deluxe'
Однако он показывает номер Делюкс номер. 112 и 113, который забронирован до и после выбранного диапазона дат выше, а не 0 или полностью забронирован. Есть ли какое-либо решение для исправления этого кода?