我想获取兴趣= IN6330,IN8408的记录。 URL为example.com?interests=IN6330,IN8408.尝试以下查询,但一次仅输入一个参数。逗号分隔的值可以是单个或多个。

SELECT * FROM `interests` WHERE FIND_IN_SET('IN8408',interests)


mysql - 逗号分隔搜索-LMLPHP

最佳答案

叹。这就是为什么人们抱怨标准化。 SQL被简化(与优化相反)以逗号分隔值的字符串搜索匹配项。

成功的最佳途径:通过为interests创建一个新表来规范化数据库,该表可以包含多个项目,每个项目都在自己的行中。在实体关系行话中,您需要一个与其父级interest具有多对一关系的item实体。然后查询表格

 SELECT item.something, item.another, interests.interest
   FROM item
   JOIN interests on item.interest_id = interests.interest_id
  WHERE interests.interest IN ('IN6330','IN8408')


将工作,并且效率很高。

如果必须将这些逗号分隔的值保留在表中,则需要更费力和冗长的方法来进行类似IN的搜索。

这样的事情可能会为您做。

 SELECT * FROM interests WHERE FIND_IN_SET('IN6330',interests)
 UNION
 SELECT * FROM interests WHERE FIND_IN_SET('IN8408',interests)


但正如您所看到的那样,它很讨厌:非常讨厌,以至于您之后软件开发人员会骂出您的名字。

归一化!

关于mysql - 逗号分隔搜索,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46909699/

10-14 16:00