在MySQL中存储逗号分隔的数据

时间:2012-01-18 18:54:46

标签: php mysql database

我已经读到这是禁止的,但我想知道这是否总是如此。我有一张可以容纳一系列座位的“餐桌”清单 enter image description here

您可以在图像中看到table_num 12将容纳2 OR 3个席位。

所以,现在我现在的解决方案是查询所有表记录(根据user_index出于未公开的原因),然后循环查看结果,查找可容纳3人的表(如果恰好是三个人正在寻找一个表)。

我通过在返回数据的“席位”列上使用array_implode()方法(在php中)来做到这一点。我觉得这比创建一个单独的“席位”表然后为每个座位可能性分配table_index和user_index更容易,然后必须运行第二个查询以在原始“表”表中找到table_num。

基本上,通过使用array_implode(),我可以绕过第二个查询。但是,我不知道这是否减税。或者,我可能错过了一些很棒的查询语言(比如关系表术语?)

3 个答案:

答案 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个座位)。因此,您可以通过字段seatsmin_seats替换max_seats字段来获得更好的结构。这些查询是直截了当的。

答案 2 :(得分:2)

如果您从此表中删除了seats列,然后有一个包含三列的新seats表:idtable_indexnum_seatstable_index与现有表格中index的关系(多对一,因为seats中每个表可能有多个entires)。您可以选择所需的表格:

SELECT tables.* FROM tables
INNER JOIN seats ON tables.index = seats.table_index
WHERE seats.num_seats = ?