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

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

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

项目里有一个新的需求,在检索处原先只有根据各个字段的模糊查询,按照我项目中的例子是 中文名,英文名以及负责人。那么有时候在匹配的字段很多的情况下,如果只输入’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,cn.en_name ,cn.maintainer

from code_repo.code_new as cn

where

cn.cn_name like "%ms%" or

cn.en_name like "%ms%" or

cn.maintainer like "%ms%"

order by

case

when cn.cn_name like "%ms%" then length(REPLACE(cn.cn_name,'ms',''))/length(cn.cn_name)

when cn.en_name like "%ms%" then length(REPLACE(cn.en_name,'ms',''))/length(cn.en_name)

when cn.maintainer like "%ms%" then length(REPLACE(cn.maintainer,'ms',''))/length(cn.maintainer)

end

结果如下图所示:

2fe2f29d9342cc3364c6d3c81200ee8d.png

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

基于Airtest抖音养号源代码

基于Airtest抖音养号源代码 以前就做过Python做了点Ai和Sprider有点基础就学了学Airtest这个插件,没大规模应该自己玩一玩电音还可以,不用像AutoJs那样找不到了,我这个代码也算是我记录一下也算是给大家抛砖引玉。Airtest的核心是Python,Python就是个脚本

CentOS安装Mysql8.0

CentOS安装Mysql8.0 卸载CentOS 7自带的MariaDB 检查系统是否已经安装MariaDB,CentOS 7默认自带MariaDB,需要覆盖。 查看命令: rpm -qa | grep mariadb 出现如下界面,可以看到系统中自带的mariadb文件,执行删除命令删除掉MariaDB。 删除命令: yum -y rem

WordPress快速建站:(5)安装部署 - MySql8

WordPress快速建站:(5)安装部署 - MySql8 MySQL8安装 1. 到MySQL官网下载页面下载windows下的msi安装文件 2. 将下载好的msi文件拷贝到虚拟机,并双击安装 3. 选择 Developer Default 4. 依赖项检查忽略,点击Yes 5. 点击Execute执行安装 6. 配置向导, Next

基于springboot的mysql实现读写分离

基于springboot的mysql实现读写分离 开发者(KaiFaX) 面向全栈工程师的开发者 专注于前端、Java/Python/Go/PHP的技术社区 作者 |Yrion 来源 | https://www.cnblogs.com/wyq178/p/13352707.html 前言 : 首先思考一个问题:在高并发的场景中,关于数据库都有哪些

基于arduino设计的测温装置

基于arduino设计的测温装置 红外非接触式测温 嵌入式测温装置 一、产品简介 二、设备组成 三、设备的性能指标 四、模块连接 五、PC端准备 六、代码测试 嵌入式测温装置 ??MLX90614 是一款红外非接触式温度计,TO-39 金属封装里同时集成了红外感应热电堆探测器

【MySQL】查询sql的执行过程及MySQL架构分析

【MySQL】查询sql的执行过程及MySQL架构分析 MySQL的发展历史和版本分支: 时间 里程碑 1996 年 MySQL1.0 发布。它的历史可以追溯到 1979 年,作者 Monty 用 BASIC 设计的一个报表工具。 1996 年 10 月 3.11.1 发布。MySQL 没有 2.x 版本。 2000 年 ISAM 升级

Welcome to MySQL Workbench:MySQL NULL 值处理

Welcome to MySQL Workbench:MySQL NULL 值处理 MySQL NULL 值处理: 为了处理这种情况,MySQL提供了三大运算符: IS NULL: 当列的值是 NULL,此运算符返回 true。 IS NOT NULL: 当列的值不为 NULL, 运算符返回 true。 =: 比较操作符(不同于 = 运算符),当比

Mysql:在limit前面加distinct

Mysql:在limit前面加distinct 今天刷牛客,遇到一道sql题是这样的 获取当前(to_date='9999-01-01')薪水第二多的员工的emp_no以及其对应的薪水salaryCREATE TABLE `salaries` (`emp_no` int(11) NOT NULL,`salary` int(11) NOT NULL,`from_date` date NOT NU

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值