一 需求
項目要做一個類似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 正則表達式