mysql实现模糊查询并按匹配程度排序

 更新时间:2023年08月31日 14:51:12   作者: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

总结

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

相关文章

  • 基于JPQL实现纯SQL语句方法详解

    基于JPQL实现纯SQL语句方法详解

    这篇文章主要介绍了基于JPQL实现纯SQL语句方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • 关于InnoDB索引的底层实现和实际效果

    关于InnoDB索引的底层实现和实际效果

    这篇文章主要介绍了关于InnoDB索引的底层实现和实际效果,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • 通过两种方式增加从库——不停止mysql服务

    通过两种方式增加从库——不停止mysql服务

    现在生产环境MySQL数据库是一主一从,由于业务量访问不断增大,故再增加一台从库。前提是不能影响线上业务使用,也就是说不能重启MySQL服务,为了避免出现其他情况,选择在网站访问量低峰期时间段操作
    2015-11-11
  • Win7下mysql5.5安装图文教程

    Win7下mysql5.5安装图文教程

    这篇文章主要为大家详细介绍了Win7下mysql5.5安装的图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • MySQL事务与隔离级别的使用基础理论

    MySQL事务与隔离级别的使用基础理论

    这篇文章主要介绍了MySQL事务的隔离级别详情,事务隔离级别越高,为避免冲突所花费的性能也就越多,即效率低。在“可重复读”级别,实际上可以解决部分的虚读问题,但是不能防止update更新产生的虚读问题,要禁止虚读产生,还是需要设置串行化隔离级别
    2023-02-02
  • MySQL 重命名表的操作方法及注意事项

    MySQL 重命名表的操作方法及注意事项

    有时候我们会遇到重命名表的需求,比如说因业务变化,需要将表 a 重命名为表 b 。这个时候可以执行 RENAME TABLE 语句或 ALTER TABLE 语句来重命名表。本篇文章我们一起来学习下重命名表相关知识。
    2021-05-05
  • Mysql获取指定时间范围数据的各种实例

    Mysql获取指定时间范围数据的各种实例

    最近在做管理后台报表时,给定一个日期范围,查出库中这个日期范围内的每一天数据,下面这篇文章主要给大家介绍了关于Mysql获取指定时间范围数据的相关资料,需要的朋友可以参考下
    2023-05-05
  • MySQL中必须了解的13个关键字总结

    MySQL中必须了解的13个关键字总结

    这篇文章主要为大家详细介绍了MySQL中必须了解学会的13个关键字,文中的示例代码简洁易懂,对我们掌握MySQL有一定的帮助,需要的可以了解下
    2023-09-09
  • MySQL8.0中的窗口函数的示例代码

    MySQL8.0中的窗口函数的示例代码

    本文主要介绍了MySQL8.0中的窗口函数的示例代码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • Dbeaver连接不上mysql数据库(Access denied for user ‘root‘@‘localhost‘)

    Dbeaver连接不上mysql数据库(Access denied for user&nb

    本文主要介绍了Dbeaver连接不上mysql数据库(Access denied for user ‘root‘@‘localhost‘),尝试了很多方法,下面就来介绍一下,感兴趣的可以了解一下
    2024-04-04

最新评论