您好我正在创建一个允许用户预订餐厅的数据库。下面是我的数据库数据模型。
我的问题是我对如何检查特定夜晚可用的桌子有点困惑。餐厅每晚有15张桌子,4人桌子(团体可以是4到6人,大于4人的团体会占用两张桌子)。
如何查询数据库以返回给定夜晚可用的表格。
感谢。
EDIT ::
这是我尝试过的。 (其中一些是假的,因为我不太清楚该怎么做)
SELECT tables.table_id
FROM tables
LEFT JOIN table_allocation
ON tables.table_id = table_allocation.table_id
WHERE table_allocation.table_id is NULL;
这会返回空的行,因为它检查表是否存在。我不太确定如何进行日期位测试。
答案 0 :(得分:3)
要查找给定THEMED_NIGHT.TEME_NIGHT_DATE上否 TABLE_ALLOCATION行的TABLE行,您应该能够执行以下操作:
SELECT *
FROM TABLES
WHERE
TABLE_ID NOT IN (
SELECT TABLE_ALLOCATION.TABLE_ID
FROM
TABLE_ALLOCATION
JOIN RESERVATION
ON TABLE_ALLOCATION.RESERVATION_ID = RESERVATION.RESERVATION_ID
JOIN THEMED_NIGHT
ON RESERVATION.THEME_ID = THEMED_NIGHT.THEME_ID
WHERE
THEME_NIGHT_NAME = :the_date
)
用简单的英语:
:the_date
)的那些。NOT IN
)。答案 1 :(得分:1)
尝试:
SELECT tables.table_id
FROM tables t
WHERE NOT EXISTS
(SELECT NULL
FROM table_allocation a
JOIN reservation r
ON a.reservation_id = r.reservation_id and
r.`TIME` between :Date and :Date+1
WHERE t.table_id = a.table_id)
注意:只返回当天未在任何时间点预订的表格。