在我的表格中我有
等子类别id, name, subcat
1, "john", "4,8,34"
2, "jimmy", "8,32,4"
3, "elthon", "42"
如何做类似的事情
SELECT * FROM mytable WHERE 8 IN (subcat)
?
答案 0 :(得分:1)
我首先想提一下....存储逗号分隔列表是一个SQL AntiPattern。我推荐Bill Karwin的优秀书籍“SQL反模式:避免数据库编程的陷阱”的第2章。在亚马逊及其他优秀书商中可以使用[https://www.amazon.com/SQL-Antipatterns-Programming-Pragmatic-Programmers/dp/1934356557]
要回答您提出的问题......使用格式良好的列表,我们可以使用MySQL FIND_IN_SET
函数。作为演示
FIND_IN_SET('8','4,8,34')
评估为TRUE。
参考:FIND_IN_SET
http://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_find-in-set
如果我们想避免使用MySQL特定的FIND_IN_SET
函数,我们可以使用LIKE比较。但要使其工作,我们需要在子列表的开头和结尾添加一个逗号字符,然后搜索逗号分隔的值,例如:列表中的 ',8,'
。例如
CONCAT(',',subcat,',') LIKE '%,8,%'