mysql实现模糊查询并按匹配程度排序
作者:zrllllll
这篇文章主要介绍了mysql实现模糊查询并按匹配程度排序方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
mysql模糊查询并按匹配程度排序
写项目,写到模糊查询的时候想到了应该匹配度高的信息考前,于是我就在网找了找,果然找到了方法。
需要用到case表达式
格式:
CASE WHEN condition_1 THEN result_1 WHEN condition_2 THEN result_2 … ELSE result END
案例
SELECT `课程号`, sum(CASE WHEN 成绩 >= 60 THEN 1 ELSE 0 END )as 及格人数 , sum(case when 成绩 < 60 THEN 1 ELSE 0 END)as 不及格人数 from score GROUP BY 课程号
代码实现
select u.id,u.name,u.sex,u.portrait,u.resume from tb_user as u where u.name = #{userName} or u.name like concat('%',#{userName},'%') order by case when u.name like concat('%',#{userName},'%') then length(REPLACE(u.name,#{userName},''))/length(u.name) end
结果:
但是有一个问题,如上图的案例,如果搜索的是莴苣1,那么就什么也搜不到了
mysql使用case when实现模糊查询搜索相似度达三个字以上
突然接到一个需求 说搜索要加一个条件 模糊查询的时候要搜索到的数据得是相似度达到三个字以上的结果
虽然sql不是很难 但是感觉确实需要记录一下
首先在impl实现层把传过来的字符串格式的搜索条件进行一个格式转换 转换成数组
然后在mybatis里面进行一个foreach循环遍历
sql如下:
在这里使用了mysql的CASE WHEN 关键字 当模糊查询搜索到的时候就赋个值为1没有搜索到则是0 以此相加 最后where条件里面加个判断 查询结果>=3的就ok了
这是这条sql的运行结果 一切ok
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。