SQL只能通过逗号

时间:2016-12-24 13:54:58

标签: php sql mysqli

我正在处理某个特定类别的商店,但我有一个问题,因为我将这样的商店类别存储在一个类别为id的记录中。 " 1,5,12&#34 ;.现在,问题是,如果我想展示类别2的商店,那么" misakens" 12作为类别2.现在是SQL。

SELECT * FROM shops WHERE shop_cats LIKE '%".$sqlid."%' LIMIT 8

有没有办法拆分记录" shop_cats"用SQL中的逗号,所以检查完整的数字?我能想到的唯一方法是获得所有的商店,并使用PHP来实现,但我不喜欢这样,因为它需要太多的资源。

3 个答案:

答案 0 :(得分:4)

这是存储类别的一种非常非常糟糕的方式,原因有很多:

  • 您将数字存储为字符串。
  • 您无法声明正确的外键关系。
  • 表格中的(正常)列应该只有一个值。
  • SQL的字符串功能很差。
  • 生成的查询无法利用索引。

将此信息存储在数据库中的正确方法是使用联结表,每个商店和每个类别一行。

有时,我们会遇到其他人非常糟糕的设计决策。如果是这种情况,那么您可以使用FIND_IN_SET()

WHERE FIND_IN_SET($sqlid, shop_cats) > 0

但你应该真正修复数据结构。

答案 1 :(得分:3)

如果可以,正确的解决方案应该是规范化表格,即每个类别有一个单独的行,而不是逗号。

如果你不能,这应该做的工作:

filter

答案 2 :(得分:0)

shops不遵循1NF(第1范式),即;每列应该只有一个值。为了避免这种情况,您需要创建另一个名为pivot table的表,该表将两个表(或实体)相关联。但是要回答你的问题,下面的SQL查询应该可以解决问题。

SELECT * FROM shops WHERE concat(',',shop_cats,',') LIKE '%,".$sqlid.",%' LIMIT 8