为了账号安全,请及时绑定邮箱和手机立即绑定

PHP MYSQL模糊查询为什么不模糊?

PHP MYSQL模糊查询为什么不模糊?

PHP
慕姐4208626 2019-03-12 12:34:25
PHP搜索MYSQL使用like '%$a%'语句,查询的结果是某条记录包含$a字符串的记录,并不是模糊匹配。比如查询“古镇漫步”,数据库中有一条记录是“古镇·漫步”,就无法被查到。这个问题有简单有效的解决方案吗?
查看完整描述

12 回答

?
MM们

TA贡献1886条经验 获得超2个赞

like '%$a%',表示要查询$a前后匹配任意字符的,比如查询“古镇漫步”可以查出来“我们在古镇漫步”,也可以查出来“我们在古镇漫步了一个小时”
而“古镇·漫步”是跟你要查询的字符串顺序显然不符合。

查看完整回答
反对 回复 2019-03-18
?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

“古镇·漫步”包含“古镇漫步”??
很明显不包含啊。。。

正确的写法

where xxx LIKE '%古镇%'  and xxx LIKE '%漫步%'
查看完整回答
反对 回复 2019-03-18
?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

先使用explode 分词后,再查询

这里需要注意使用and,or的话会出现很多问题

查看完整回答
反对 回复 2019-03-18
?
慕后森

TA贡献1802条经验 获得超5个赞

"%古镇漫步%"匹配的是以"古镇漫步"为连续字符的内容当然找不到"古镇·漫步"
可以使用字符串函数、正则函数来匹配查找。

不过业务上一般规避使用mysql自带的函数,最好是mysql简单查询,再用php来代替处理业务逻辑需要的数据。

查看完整回答
反对 回复 2019-03-18
?
开满天机

TA贡献1786条经验 获得超13个赞

用% 或 _, 例如 like '%古镇_漫步%'

查看完整回答
反对 回复 2019-03-18
?
胡子哥哥

TA贡献1825条经验 获得超6个赞

    SELECT * FROM table WHERE name LIKE '%古镇_漫步%'
查看完整回答
反对 回复 2019-03-18
?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

是的,用sphix搜索引擎

查看完整回答
反对 回复 2019-03-18
?
墨色风雨

TA贡献1853条经验 获得超6个赞

如果要搜索的记录数很多建议使用sphinx或者xunsearch或者elasticSearch。我的博客有sphinx安装文章。

如果记录数少,可以采用比如要搜索ABCD,将其拆解成'SELECT * FROM A_TABLE WHERE FILED LIKE '%A%' AND FILED LIKE '%B%' AND FILED LIKE '%C%' AND FILED LIKE '%D%'

查看完整回答
反对 回复 2019-03-18
  • 12 回答
  • 0 关注
  • 506 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信