繁体   English   中英

MySQL regexp对一组术语

[英]MySQL regexp against an array of terms

我有以下查询在列中搜索给定的字符串

SELECT * FROM table WHERE column_name REGEXP '$search_term'

是否可以搜索该列以查看它是否包含数组中的一个(或多个)单词?

您可以使用FIND_IN_SET()来查找一个或多个单词

SELECT * 
FROM table 
WHERE FIND_IN_SET(column_name, 'word1,word2,word3')

在set中查找的内容是查看列中的值并将其与逗号分隔字符串中的值进行比较。

警告!!!!!

不要将变量直接放在这样的查询中......它会使你对SQL INJECTION攻击产生破坏性! 你应该研究一下使用预处理语句。看看这里有关sql注入的帮助

注意:

如果你没有办法得到一个逗号分隔的单词列表,你可以使用GROUP_CONCAT()..我将使用两种方式提供下面的演示。

这是一个SQLFIDDLE

查询:

SET @word_list := (SELECT GROUP_CONCAT(words) FROM test where id IN(1, 3, 4));

SELECT @word_list;

在将字符串分配给@word_list之后,您想要查看其中的内容,以便我选择它。

OUTPUT:

'whatever,maybe,final'

现在让我们使用用户定义的变量在set query中运行find,然后再使用字符串再次运行find。

查询:

SELECT * 
FROM test 
WHERE FIND_IN_SET(words, @word_list );

OUTPUT:

+----+----------+
| id | words    |
+----+----------+
| 1  | whatever |
| 3  | maybe    |
| 4  | final    |
+----+----------+

写下来:

SELECT * 
FROM test 
WHERE FIND_IN_SET(words, 'whatever,maybe,final')

OUTPUT:

+----+----------+
| id | words    |
+----+----------+
| 1  | whatever |
| 3  | maybe    |
| 4  | final    |
+----+----------+

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM