【发布时间】:2014-07-14 06:09:41
【问题描述】:
我在酒店预订中的房间可用性方面有这个数据库结构
下面是我的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-06-01 至 2014-06-06 可用的豪华房
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 或完全预订。有没有办法修复这个代码?
【问题讨论】:
-
你想在这两个日期之间获得豪华房还是什么?
-
将
left join更改为inner join -
我想从2014-06-01到2014-06-06入住豪华房。然而,它显示的豪华房也在 5 月和 8 月预订,而不是显示 0 或已满。我已更改为内部联接,但没有更改