一 需求
项目要做一个类似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 正则表达式