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
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
MySql InnoDB存储引擎之Buffer Pool运行原理讲解
缓冲池是用于存储InnoDB表,索引和其他辅助缓冲区的缓存数据的内存区域。缓冲池的大小对于系统性能很重要。更大的缓冲池可以减少磁盘I/O来多次访问同一表数据。在专用数据库服务器上,可以将缓冲池大小设置为计算机物理内存大小的百分之802023-01-01
详解MySQL中DROP,TRUNCATE 和DELETE的区别实现mysql从零开始
注意:这里说的delete是指不带where子句的delete语句 相同点: truncate和不带where子句的delete, 以及drop都会删除表内的数据2008-04-04
Mysql 5.6 "隐式转换"导致的索引失效和数据不准确的问题
这篇文章主要介绍了Mysql 5.6 “隐式转换”导致的索引失效和数据不准确的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-12-12


最新评论