我正在构建一个酒店预订系统,当我尝试进行查询以检索给定范围内的所有可用房间类型时,我陷入了困境。
我有两张桌子Rooms和Reservations。桌子Rooms上有酒店的房间。它们的数量 ( id) 和类型 ( type)。
表Reservations保存着客户的预订。预订编号 ( id)、关联的房间号 ( room_id) 和日期范围 (from和to)
我尝试过这个查询:
SELECT room_id as available_room_number, type
FROM roomstesting
LEFT JOIN reservations ON roomstesting.id = reservations.room_id
WHERE reservations.id
NOT IN (reservations.e_from <='"2014-03-07 19:00:00'
AND reservations.e_to >='2014-03-08 19:00:00')
Run Code Online (Sandbox Code Playgroud)
我试图获取 3 月 7 日至 3 月 8 日范围内的所有可用房型。我希望得到modern room查询结果。因为modern room id 4没有与日期范围重叠的预订,并且所有其他3个房间都有3月6日至3月9日的预订。但我没有得到我想要的结果。下面是我的数据库的结构(简化)
客房
| id | type |
|||||||||||||||||||||
| 1 | master suite |
| 2 | master suite |
| 3 | modern room |
| 4 | modern room |
Run Code Online (Sandbox Code Playgroud)
预订
| id | room_id | from | to |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 1 | 1 | 2014-03-05 08:00:00 | 2014-03-09 08:00:00 |
| 2 | 2 | 2014-03-05 08:00:00 | 2014-03-09 08:00:00 |
| 3 | 3 | 2014-03-05 08:00:00 | 2014-03-09 08:00:00 |
Run Code Online (Sandbox Code Playgroud)
预期结果
| available_room_number | type |
||||||||||||||||||||||||||||||||||||||
| 4 | modern room|
Run Code Online (Sandbox Code Playgroud)
如果这里有人能告诉我应该如何处理这个问题,那就完美了。期待您的回复。
尝试这个:
SELECT * FROM Rooms WHERE ID NOT IN(SELECT room_id FROM reservations WHERE '2014-03-07 19:00:00' < e_to AND '2014-03-08 19:00:00' > e_from)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3510 次 |
| 最近记录: |