猿问

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

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

慕姐4208626
浏览 507回答 12
12回答

MM们

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

侃侃尔雅

“古镇·漫步”包含“古镇漫步”??很明显不包含啊。。。 正确的写法 where xxx LIKE '%古镇%' and xxx LIKE '%漫步%'

明月笑刀无情

先使用explode 分词后,再查询 这里需要注意使用and,or的话会出现很多问题

慕后森

"%古镇漫步%"匹配的是以"古镇漫步"为连续字符的内容当然找不到"古镇·漫步"可以使用字符串函数、正则函数来匹配查找。 不过业务上一般规避使用mysql自带的函数,最好是mysql简单查询,再用php来代替处理业务逻辑需要的数据。

开满天机

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

胡子哥哥

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

qq_遁去的一_1

是的,用sphix搜索引擎

墨色风雨

如果要搜索的记录数很多建议使用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%'。
随时随地看视频慕课网APP
我要回答