MySQL regexp对一组术语

时间:2014-08-21 15:12:32

标签: php mysql arrays regex

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

SELECT * FROM table WHERE column_name REGEXP '$search_term'

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

1 个答案:

答案 0 :(得分:3)

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

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

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

注意!!!!!

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

注意:

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

这是一个SQLFIDDLE

QUERY:

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

SELECT @word_list;

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

输出:

'whatever,maybe,final'

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

QUERY:

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

输出:

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

写信:

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

输出:

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