簡體   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