MySQL喜欢多个值

vwoqyblh  于 2023-01-04  发布在  Mysql
关注(0)|答案(9)|浏览(91)

我有这个MySQL查询。
我有包含此内容的数据库字段

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

为什么这个类似的查询不起作用?我需要体育或酒吧或两者兼而有之的字段?

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

q3aa05251#

更快的方法:

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

wd2eg0qa

wd2eg0qa2#

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

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

mitkmikd3#

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

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

ugmeyewa4#

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

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

fdx2calv5#

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

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

dgenwo3n6#

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

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

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

WHERE interests REGEXP '^sports|^pub'

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

p8h8hvxi

p8h8hvxi7#

您的查询应为SELECT * FROMtableWHERE find_in_set(interests, "sports,pub")>0
我所理解的是,您将利息存储在表的一个字段中,这是一个误解。您确实应该有一个“利息”表。

7bsow1i6

7bsow1i68#

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

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

手册中的详细信息。

2j4z5cfb

2j4z5cfb9#

更多工作示例:

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

任务是在电子邮件扩展名等于多个公司域的情况下使用筛选器计算事件的参与者。

相关问题