我有这个MySQL查询。
我有包含此内容的数据库字段
sports,shopping,pool,pc,games
shopping,pool,pc,games
sports,pub,swimming, pool, pc, games
为什么这样的查询不起作用? 我需要运动或酒吧或两者的田地?
SELECT * FROM table WHERE interests LIKE ('%sports%', '%pub%')
答案 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
中的更多信息
答案 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'