餐厅表预订:MySQL Select应该显示一张表及其预订的列表



我现在有点纠结于一个问题。我得订一间餐厅。所以我有表格和时间窗口。用户可以在特定的时间窗口预订一张桌子。现在我想要一个Select,显示我所有的时间窗口从一个表和谁保留它,无论它是否保留。如果不是,单元格应该为空。

我有这些表

tables
- table_id
- description
time-windows
- time-window_id
- fk_table_id
- starttime
- endtime
reservations
- reservation_id
- fk_time-window_id
- fk_user_id
- Date
user
- user_id
- name

结果应该是这样的一个列表:

time-window_id | table_id | start    |  end      | user_id   | username
2              |  1       | 08:00:00 |  08:30:00 | 55        | Tom
3              |  1       | 08:30:00 |  09:00:00 |           |
4              |  1       | 09:00:00 |  09:30:00 | 23        | Ben
5              |  1       | 09:30:00 |  10:00:00 |           |

使用正常连接,我只获得保留的时间窗口,但我不希望保留的时间窗口也被列出。

你知道它是如何工作的吗?可能它很简单,但我不知道它是如何工作的:(

注:是的,时间窗口是永久的(我的客户提出的一个条件)

我会稍微改变一下您的数据库设计:时间窗口可以是一个只定义时间的静态表。然后在每个预订记录中指定table_id和time-window_id。使用这种设计,您可以通过左连接预订表来完成您想要的操作。

SELECT `tables`.*, `time-windows`.*, `reservations`.*
FROM `tables`
JOIN `time-windows`
LEFT JOIN `reservations` ON `reservations`.`table_id` = `tables`.`table_id`
AND `reservations`.`time_window_id` = `time-windows`.`time_window_id`
WHERE `tables`.`table_id`=?;

相关内容

最新更新