文档章节

mysql 正则模糊搜索

t
 tystys
发布于 2017/03/27 15:54
字数 563
阅读 25
收藏 0

mysql  查询时 模糊搜索

例如:username ‘dg组合名字’

现在用户输入了‘组字’或者‘d字’---也想搜索出结果--

 SELECT * 
FROM `xx_admin` 
WHERE username REGEXP '[d|组|字]{3}'
LIMIT 0 , 30

上一条语句 匹配的是 username字段 同时包含‘d组字’中的三个字,

如果如果你想匹配的是 username字段只包含‘d组字’中的随便一

个字的,则是 SELECT * 
FROM `xx_admin` 
WHERE username REGEXP '[d|组|字]{3}'
LIMIT 0 , 30

 

 

功能是解决了,其实最简单的直接用like 也可以,正好一哥们说写个mysql 正则匹配模糊搜索给他,就试了下,,,

注意下问题,,,

用正则是完全不走索引的,而如果用like进行模糊搜索,当你用‘XXXX关键词%’时他是走索引的,而‘%关键词’和‘%关键词%’时是不走索引的,,,一定注意

细节----

仔细来看这条语句

先看场景吧

数据库信息如下

现在想实现的是 我搜索‘项目属’可以收到两条结果,

可选择的sql语句

首先看第一种选择

 SELECT * 
FROM `xx_admin` 
WHERE username like '%项目属%'
LIMIT 0 , 30

完全可以搜到---但是有问题;如果用户输入的是‘属项目’,你是搜索不出来的,就是加入用户输入的关键词顺序换了,你是搜索不到的,,,

解决是

SELECT * 
FROM `xx_admin` 
WHERE username LIKE '%目%'
AND username LIKE '%属%'
AND username LIKE '%项%'
LIMIT 0 , 30

 

 

再来看mysql 正则的模糊搜索

 SELECT * 
FROM `xx_admin` 
WHERE username REGEXP '[项|目|属]{3}'
LIMIT 0 , 30

或者

SELECT * 
FROM `xx_admin` 
WHERE username REGEXP '[项目属]{3}'
LIMIT 0 , 30

这个看上去确实是不带顺序的(正则里[]表示的是其中任意一个或者多个),也是去取了三个{3},

但是其实他也是有问题的,因为username REGEXP '[项目属]{3}'   这条语句,是可以匹配‘项目属’,和‘属项目’这些的,,就说顺序换了没问题,但是同时他还可以匹配‘项项项’,‘目目目’,‘属属属’,‘项项目’,等等这些,因为[项目属]{3}指的是其中任意一个,并没有排他性,

 

 

另外mysql的like用正则来写  

 

SELECT * 
FROM  `xx_admin` 
WHERE username REGEXP  '.*((项目属性){1}).*'
LIMIT 0 , 30

 

© 著作权归作者所有

上一篇: phpexcel ajax 下载
下一篇: word 备注 换行
t
粉丝 2
博文 72
码字总数 82272
作品 0
私信 提问
PHP笔记学习节选(创世纪新篇)

if ,true,false,return value. php之SQL语句中的模糊查找 主要通过LIKE(不区分大小写)关键字实现模糊查找。LIKE条件一般用在指定搜索某字段的时候, 通过"%"或者" _" 通配符的作用实现模糊查...

crossmix
2015/09/18
81
1
MySql 查询以逗号分隔的字符串的方法(正则)

现数据库表中某个字段保存的值为“01,07,08”,需要sql去查询下表中到相应的名称: 1、使用findinset()... 查询字段中包含01,07,08的记录: SELECT * FROM test WHERE find_in_set('01',it...

豆花饭烧土豆
2016/03/13
946
0
MySql模糊查询like通配符

MySQL提供标准的SQL模式匹配,以及一种基于象Unix实用程序如vi、grep和sed的扩展正则表达式模式匹配的格式。 一、SQL模式 SQL的模式匹配允许你使用“”匹配任何单个字符,而“%”匹配任意数目...

别寒
2015/08/28
135
0
MySQL基础教程(命令行操作方式)

连接和断开数据库服务器 连接数据库服务:shell> mysql -h host -u user -p 断开数据库服务:mysql> QUIT 输入查询(验证数据库安装正确) 查询数据库版本:SELECT VERSION(); 查询数据库创建...

周彬彬
03/02
0
0
Lucene4.3开发之插曲之落寞繁华

本篇是关于lucene中另外一种丰富的查询方式---正则查询,lucene内置了许多的查询api,以及更强大的自定义查询方式的QueryParse,大部分情况下我们使用内置的查询api,基本上就能满足我们的需...

heroShane
2014/02/21
103
0

没有更多内容

加载失败,请刷新页面

加载更多

一、docker 入坑(win10和Ubuntu 安装)

前言 终究还是绕不过去了,要学的知识真的是太多了,好在我们还有时间,docker 之前只闻其声,不曾真正的接触过,现在docker 越来越火,很多公司也都开始使用了。所以对于我们程序员而言,又...

quellanan2
23分钟前
4
0
AutoCompleteTextView

小技巧按菜单键 当菜单打开之前会调用onMenuOpened(int featereId,Menu menu),可以重写这个方法,弹出对话框或者Popmenu 再布局中添加控件AutoCompleteTextView. <AutoCompleteTextVie...

逆天游云
27分钟前
4
0
谷歌软件商店:推出5美元会员 可用数百个软件

腾讯科技讯,谷歌和苹果是全球两大智能手机操作系统的运营者,两家公司旗下分别拥有占据行业垄断地位的谷歌软件商店和苹果软件商店。据外媒最新消息,手机软件商店的商业模式正在发生一些变化...

linuxCool
49分钟前
3
0
RocketMQ 多副本前置篇:初探raft协议

Raft协议是分布式领域解决一致性的又一著名协议,主要包含Leader选举、日志复制两个部分。 温馨提示: 本文根据raft官方给出的raft动画进行学习,其动画展示地址:http://thesecretlivesofda...

中间件兴趣圈
49分钟前
3
0
elasticsearch 6.8.0 添加认证

1. 修改elasticsearch-6.8.0/config/elasticsearch.yml 最后添加一行:xpack.security.enabled: true 2. 初始化用户和密码 ./bin/elasticsearch-setup-passwords interactive 我这里初始化为......

coord
51分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部