基於MySQL正則表達式實現類似全庫搜功能

一 需求

項目要做一個類似Elasticsearch全庫搜的小功能,但是數據存放在MySQL裏面,數據量不是很大,使用模糊查詢性能也還可以接受。

一開始想直接用like,但是爲了支持多個關鍵字查詢,用like的話要循環字段進行拼裝成如下的SQL語句:

SELECT * from tableName 
WHERE field_a like '%關鍵字1%' 
  OR field_a like '%關鍵字2%' 
  OR field_a like '%關鍵字3%' 
  OR field_b like '%關鍵字1%' 
  OR field_b like '%關鍵字2%' 
  OR field_b like '%關鍵字3%' 

但是還有其他多個字段都需要支持關鍵字搜索,循環拼裝顯然比較麻煩。

二 方法

然後想到之前有用過正則表達式查字段值匹配的方法,再次查看了下正則表達式用法,發現有個正則正好滿足當前需求:

p1|p2|p3:  匹配 p1 或 p2 或 p3。
-- SQL語句
SELECT * FROM tableName WHERE field_a REGEXP 'key1|key2|key3';

使用正則這種寫法就避免了循環拼裝字段的麻煩。

實例查詢如下:

SELECT * from t_cities 
WHERE city REGEXP '臺|河' 
OR provinceid REGEXP '臺|河' 

結果如下:
在這裏插入圖片描述
附:MySQL其他正則表達式用法在這裏插入圖片描述


參考:
1.MySQL 正則表達式

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章