Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > mysql模糊查询并按匹配程度排序

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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文