选择给定日期范围内的可用房间

Cre*_*ane 4 mysql sql

我正在构建一个酒店预订系统,当我尝试进行查询以检索给定范围内的所有可用房间类型时,我陷入了困境。

我有两张桌子RoomsReservations。桌子Rooms上有酒店的房间。它们的数量 ( id) 和类型 ( type)。

Reservations保存着客户的预订。预订编号 ( id)、关联的房间号 ( room_id) 和日期范围 (fromto)

我尝试过这个查询:

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)

如果这里有人能告诉我应该如何处理这个问题,那就完美了。期待您的回复。

eri*_*pap 5

尝试这个:

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)