我已经读到这是禁止的,但我想知道这是否总是如此。我有一张可以容纳一系列座位的“餐桌”清单
您可以在图像中看到table_num 12将容纳2 OR 3个席位。
所以,现在我现在的解决方案是查询所有表记录(根据user_index出于未公开的原因),然后循环查看结果,查找可容纳3人的表(如果恰好是三个人正在寻找一个表)。
我通过在返回数据的“席位”列上使用array_implode()方法(在php中)来做到这一点。我觉得这比创建一个单独的“席位”表然后为每个座位可能性分配table_index和user_index更容易,然后必须运行第二个查询以在原始“表”表中找到table_num。
基本上,通过使用array_implode(),我可以绕过第二个查询。但是,我不知道这是否减税。或者,我可能错过了一些很棒的查询语言(比如关系表术语?)
答案 0 :(得分:4)
创建一个名为TableSeats
的表格。其中,您有一个table_num
和一个seats
列。使用table_num
列作为外键。然后,为了找到可容纳3个人的桌子,就像这样:
select
*
from
tables t
where
exists (select 1 from tableseats s where s.seats = 3)
这里的魔力是exists
子句。当然,您也可以执行inner join
,但我建议您exists
,因为这样您就可以通过说where s.seats >= 7
找到任何可以容纳至少7个人的表格,甚至一张桌子,可以容纳5到8个人where s.seats between 5 and 8
。
答案 1 :(得分:4)
如果我错了,请纠正我,但这不是一个清单。它更像是一个范围(例如,从2到3个座位)。因此,您可以通过字段seats
和min_seats
替换max_seats
字段来获得更好的结构。这些查询是直截了当的。
答案 2 :(得分:2)
如果您从此表中删除了seats
列,然后有一个包含三列的新seats
表:id
,table_index
和num_seats
, table_index
与现有表格中index
的关系(多对一,因为seats
中每个表可能有多个entires)。您可以选择所需的表格:
SELECT tables.* FROM tables
INNER JOIN seats ON tables.index = seats.table_index
WHERE seats.num_seats = ?