php如何实现模糊且精确的查找

发布时间:2020-08-20编辑:脚本学堂
在php代码中实现模糊而精确的查找,是不是看着有点不可思议呢?请看本文的介绍吧,用一个具体的例子,为大家展示其实现方法。

数据类似下面这样:
 

复制代码 代码示例:
id | cid
--------------------------------
1| ,4,5,7,
--------------------------------
3| ,4,5,8,
--------------------------------
4| ,5,4,
--------------------------------
6| ,5,4,7,8,
--------------------------------
7| ,8,4,5,7,9,
--------------------------------
8| ,7,9,4,5,8,10,

假如我post过来的cid值分别是4和5,那我如何精确的查询到id=4的这条数据?
同理,假如我post过来的cid值分别是4,5,7,8的时候,那我如何精确的查询到id=6的这条数据?

注意:
cid这一列的数据排列是非固定式的,没规律可循,唯一能够确认的就是不会重复出现同一个值
还有就是用like写法and链接这种方式我试过了,不够精确.例如...where cid like'%,4,%' and cid like'%,5,%'

解决方法:
分别用了三种方法做测试,测试的时候是循环20000次提取数据库里的数据,结果如下:
 

复制代码 代码示例:

//1770 ms~1800 ms
Select id,type From hotel where type like'%|21|%'and type like'%|101|%'and LENGTH(type)=length('|21|101|')

//1760 ms~1810 ms
Select id,type From hotel where locate('|21|',type)>0and locate('|101|',type)>0and LENGTH(type)=length('|21|101|')

//CPU直接100%,瀏覽器挂掉
Select id,type From hotel where type REGEXP concat('.*[',replace('21,101',',','|'),'].*')

php实现模糊而又精确的查找就这么实现了,是不是很有意思呢?
以上就是今天php 教程的内容,希望本文给出的方法与思路,对大家有所帮助。