我想获取兴趣= IN6330,IN8408的记录。 URL为example.com?interests=IN6330,IN8408.
尝试以下查询,但一次仅输入一个参数。逗号分隔的值可以是单个或多个。
SELECT * FROM `interests` WHERE FIND_IN_SET('IN8408',interests)
最佳答案
叹。这就是为什么人们抱怨标准化。 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/