MySQL 基于like的模糊查询 并根据查询的匹配度排序

项目需求中,需要在MySQL中实现基于like的模糊查询,并根据查询的匹配度进行排序。通过使用case表达式结合匹配度计算(比较替换查询子串后的字符串长度与原长度的比值),实现了匹配度越高的结果优先展示。这样可以确保输入'ms'等关键字时,完全匹配的记录会出现在搜索结果前列。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目里有一个新的需求,在检索处原先只有根据各个字段的模糊查询,按照我项目中的例子是 中文名,英文名以及负责人。那么有时候在匹配的字段很多的情况下,如果只输入’ms’(数据库中刚好有这样的英文名) 这个正好匹配的字段原则上要显示在第一列,或者说匹配程度越好的要显示在越前面,而不仅仅是一连串的返回匹配到的结果而已。查询结果有10多页,那个提需求的老哥 我能感受到他找这条数据的痛苦。。。

case 表达式

那么言归正传,主要就是对order by部分进行匹配度的计算,这里需要用到 case when 表达式 因为我需要匹配好几个字段。
在case 里面可以有多个when then else的三元表达式

匹配度的计算

这里首先将字段中我们待查询的子串变为空字符串,然后比较剩余字符串长度 与原来字符串长度的比值

length(REPLACE(cn.cn_name,‘ms’,’’))/length(cn.cn_name)

比如说 abcms 在经历 替换以后 变成 abc 比值为 3/5
以及 amsdsms 在经历 替换以后 变成 ads 比值为 3/7
可以发现如果结果越小,表示被替换的值就越多,也就是匹配度越高,那么按照order by的升序排列,就会在越前面被显示出来

SQL语句

select cn.cn_name,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值