[英]Using MySQL query in selecting room availability
在房間預訂方面,我在酒店預訂中有此數據庫結構
下面是我的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
預訂。 然后,我通過使用以下MySQL代碼選擇了2014年6月1日至2014年6月6日可用的豪華間
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或已滿。 有解決此代碼的解決方案嗎?
我認為您必須同時檢查兩個日期才能入住和退房:
SELECT
room.room_num
FROM
room
WHERE
roomtype = 'Deluxe' AND
room.room_num not in
(
SELECT
room_booked.room_num
FROM
room_booked
WHERE
(room_booked.dor<='2014-06-1' and room_booked.dco>='2014-06-1')
OR
(room_booked.dor<'2014-06-06' and room_booked.dco>='2014-06-06')
OR
(room_booked.dor>='2014-06-01' and room_booked.dco<'2014-06-06')
)
重新編輯答案並創建一個sqlfiddle進行測試
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.