MySQL喜欢多个值


144

我有这个MySQL查询。

我有与此内容相关的数据库字段

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

为什么这样的查询不起作用?我需要体育或酒吧或两者兼有的领域吗?

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

Answers:


133

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

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

3
这对于多重查询(例如5个或更多动态可搜索查询)没有好处,因此,使用regexp会更好。
Shayan Ahmad

315

更快的方法是:

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


如果您要以字符串(a | b | c ...)的形式传入大量未知的关键字,则正则表达式是您唯一想执行的方式,不是吗?
频繁

1
您知道是否可以通过子查询来完成?假设我有一列需要搜索的单词,如何用子查询替换“ sports | pub”?
AdamMc331

嘿,您能告诉我REGEXP for LIKE而不是%LIKE%,我正在尝试获取确切的字符串...
Deepanshu Goyal

3
此解决方案将第一个解决方案从水里吹了出来
Donato

2
要从列中获取正则表达式值:(select group_concat(myColumn separator '|') from..)
daVe 2015年

34

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

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

5
是的!我想要相反的方式。因此,它是SELECT * FROM table WHERE interests NOT REGEXP 'sports|pub' (>‿◠)✌
巴忒罗

3
这个答案与jazkat您五年前提交的答案有何不同?
Vaidas

@Vaidas-谢谢-在问我自己同样的问题...:D
theFriedC

18

您也可以使用 RLIKE

例如:

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

6
只是为大家说明RLIKE和REGEXP是同义词
Intacto

8

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

我的理解是,您将利益存储在表的一个字段中,这是一个误解。您绝对应该有一个“兴趣”表。


2
我认为应该是SELECT * FROM table WHERE find_in_set(interests, 'sports,pub'),但是这种技术在大多数情况下都可能胜过正则表达式。
克里斯·斯特里克兰

7

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

像这样:

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



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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.