基于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 正则表达式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值