MySQL喜欢多个值

时间:2010-11-13 11:08:21

标签: mysql sql sql-like

我有这个MySQL查询。

我有包含此内容的数据库字段

sports,shopping,pool,pc,games 
shopping,pool,pc,games 
sports,pub,swimming, pool, pc, games   

为什么这样的查询不起作用? 我需要运动或酒吧或两者的田地?

SELECT * FROM table WHERE interests LIKE ('%sports%', '%pub%')

9 个答案:

答案 0 :(得分:277)

更快的方法:

WHERE interests LIKE '%sports%' OR interests LIKE '%pub%'

是这样的:

WHERE interests REGEXP 'sports|pub'

在此处找到此解决方案:http://forums.mysql.com/read.php?10,392332,392950#msg-392950

有关REGEXP的更多信息,请访问:http://www.tutorialspoint.com/mysql/mysql-regexps.htm

答案 1 :(得分:112)

(a,b,c)列表仅适用于in。对于like,您必须使用or

WHERE interests LIKE '%sports%' OR interests LIKE '%pub%'

答案 2 :(得分:31)

为什么不试试REGEXP。试试这样:

SELECT * FROM table WHERE interests REGEXP 'sports|pub'

答案 3 :(得分:9)

您也可以使用RLIKE

例如:

SELECT * FROM TABLE_NAME WHERE COLNAME RLIKE 'REGEX1|REGEX2|REGEX3'

答案 4 :(得分:8)

您的查询应为SELECT * FROM `table` WHERE find_in_set(interests, "sports,pub")>0

我的理解是你将兴趣存储在桌子的一个区域,这是一种误解。你应该明确地拥有一个“兴趣”表。

答案 5 :(得分:5)

如果在AND参数后使用此功能,请不要忘记使用括号

像这样:

WHERE id=123 and(interests LIKE '%sports%' OR interests LIKE '%pub%')

答案 6 :(得分:2)

就像@Alexis Dufrenoy提出的那样,查询可能是:

SELECT * FROM `table` WHERE find_in_set('sports', interests)>0 OR find_in_set('pub', interests)>0

manual

中的更多信息

答案 7 :(得分:1)

更多工作示例:

SELECT COUNT(email) as count FROM table1 t1 
JOIN (
      SELECT company_domains as emailext FROM table2 WHERE company = 'DELL'
     ) t2 
ON t1.email LIKE CONCAT('%', emailext) WHERE t1.event='PC Global Conference";

如果电子邮件扩展名等于多个公司域,则任务是通过过滤器对事件进行计数。

答案 8 :(得分:1)

或者如果您只需要匹配单词的开头:

WHERE interests LIKE 'sports%' OR interests LIKE 'pub%'

您可以使用正则表达式插入符匹配:

WHERE interests REGEXP '^sports|^pub'

https://www.regular-expressions.info/anchors.html