我现在对一个问题有点挣扎。我必须为餐厅预订节目。所以我有桌子和时间窗。并且用户可以在特定时间窗口中保留表格。现在我想要一个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 | |
通过正常连接,我只获得保留的连接,但我也不希望列出保留的时间窗口。
任何想法如何运作? 可能它非常简单,但我不知道这是如何工作的:(
P.S。:是的,时间窗是永久的(来自我的客户的条件)
答案 0 :(得分:1)
我会稍微改变你的数据库设计:time-windows可以是一个只定义时间的静态表。然后在每个预留记录中指定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`=?;