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

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

阅读 7.7k
12 个回答

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

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

正确的写法

where xxx LIKE '%古镇%'  and xxx LIKE '%漫步%'

先使用explode 分词后,再查询

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

之前做过简单说一下。
PHP+MySQL+Sphinx的组合对于网站搜索来说也还是可以的。
中文分词使用coreseekSphinx一样的

coreseek安装使用的具体步骤可以按照官网来进行

coreseek一直要发布、发布新版本都快到2018年了还没发。。。

貌似现在coreseek.cn打不开了,看一下其它人员的技术博客吧

使用分词大法啊.分完词再like

你的古镇漫步中间有符号,当然匹配不到了,你可以用php+mysql+sphinx来实现

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

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

新手上路,请多包涵

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

    SELECT * FROM table WHERE name LIKE '%古镇_漫步%'

是的,用sphix搜索引擎

mysql的模糊查询最好少用,如果后台使用的话是可以的,真要面向大量用户了,建议还是做个专业的查询吧
如sphinx,elasticSearch(elasticSearch难度与逼格相对较高,谨慎入手)
你那个mysql的模糊查询的问题大家已经指正了就不啰嗦了

如果要搜索的记录数很多建议使用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%'

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题