MySQL 喜欢多个值

我有这个 MySQL 查询。

我有这个内容的数据库字段

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

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

SELECT * FROM table WHERE interests LIKE ('%sports%', '%pub%')
401196 次浏览

(a,b,c)列表只适用于 in。对于 like,你必须使用 or:

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

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

我所理解的是,您将兴趣存储在表中的一个字段中,这是一个误解。您肯定应该有一个“兴趣”表。

更快的方法:

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

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

像这样:

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

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

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

就像@Alexis Dufrenoy 建议的那样,这个问题可以是:

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

手动操作中提供更多信息。

您也可以使用 REGEXP的同义词 RLIKE

例如:

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

更多工作实例:

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";

如果电子邮件扩展名等于多个公司域名,那么 Task 就是在一个事件中使用过滤器对参与者进行计数。

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

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

可以使用 regexp 插入符号匹配:

WHERE interests REGEXP '^sports|^pub'

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