我有以下查询在列中搜索给定的字符串
SELECT * FROM table WHERE column_name REGEXP '$search_term'
是否可以搜索该列以查看它是否包含数组中的一个(或多个)单词?
答案 0 :(得分:3)
您可以使用FIND_IN_SET()查找一个或多个字词
SELECT *
FROM table
WHERE FIND_IN_SET(column_name, 'word1,word2,word3')
在set中查找的内容是查看列中的值并将其与逗号分隔字符串中的值进行比较。
如果你没有办法得到逗号分隔的单词列表,你可以使用GROUP_CONCAT()..我将使用两种方式提供下面的演示。
这是一个SQLFIDDLE
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,然后再使用字符串运行。
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 |
+----+----------+