对于模糊查询的SQL,怎么优先返回等值记录

说明:记录一次SQL改进的方法,希望能对大家有启发。

场景

前端项目有一个输入框,根据输入的银行名称,去模糊查询对应的数据库表,返回结果集,显示到下拉列表中。

因为银行名称字段包括了分行名,所以结果是模糊查询后可能仍有十几万条记录。考虑到效率和安全,在SQL后面用limit做了个限制,假设只返回了前10条。

数据库表如下:

在这里插入图片描述

但是这会出现一个问题,如下:

select *
from tb_bank
where bank_name like '%中国银行%'
limit 10;

返回的结果里面,因为做了数量限制,且等值匹配的“中国银行”在数据库表的下面,这样查询的结果就比较离谱了。

结果中没有返回等值匹配的“中国银行”记录,如果用户就想选择这条记录,那么怎么都选不到。

在这里插入图片描述

解决

所以,我对上面的SQL做了一点改进。使用传入的银行名称字符数量与数据库表中的银行名称字符数量做一个比值,比值越高,说明匹配度越高,如1,则是等值匹配的。

最后,再根据这个比值降序返回,就达到了我想要的结果。如下:

select *, char_length('中国银行') / char_length(bank_name) as score
from tb_bank
where bank_name like '%中国银行%'
order by score desc
limit 10;

查询结果,等值匹配的在最上面,后面匹配度(即 传入的银行名称字符数 / 数据库中的银行名称字符数)越高,则越靠前,相当于一个简易的算分,分值越高越靠前。

在这里插入图片描述

在代码中,则可以换成对应的名称,如下:

select *, char_length(#{bankName}) / char_length(bank_name) as score
from tb_bank
where bank_name like concat('%', #{bankName}, '%')
order by score desc
limit 10;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/677647.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

缓存穿透、缓存击穿与缓存雪崩

缓存穿透、缓存击穿与缓存雪崩 1.本质区别 缓存穿透指的是数据库不存在数据,导致无法缓存,每次查询都查数据库,数据库压垮 缓存击穿指的是缓存键值对key过期了,key过期期间,大量请求访问,不经过缓存&…

ONLYOFFICE桌面编辑器8.0新特性:PDF表单、RTL支持、Moodle集成、本地界面主题等

ONLYOFFICE是由领先的IT公司—Ascensio System SIA经验丰富的IT专家开发的项目。这是一款强大的在线编辑器,能够为提供高效的文本文档、电子表格、演示文稿、表单和 PDF 编辑工具。 继 ONLYOFFICE 文档 v8.0发布后,适用于 Linux、Windows 和 macOS 的免费…

C++中类的6个默认成员函数【构造函数】 【析构函数】

文章目录 前言构造函数构造函数的概念构造函数的特性 析构函数 前言 在学习C我们必须要掌握的6个默认成员函数,接下来本文讲解2个默认成员函数 构造函数 如果一个类中什么成员都没有,简称为空类。 空类中真的什么都没有吗?并不是&#xff0c…

电商网站基础布局——以小兔鲜为例

项目准备 /* base.css */ /* 內减模式 */ * {margin: 0;padding: 0;box-sizing: border-box; }/* 设置网页统一的字体大小、行高、字体系列相关属性 */ body {font: 16px/1.5 "Helvetica Neue", Helvetica, Arial, "Microsoft Yahei","Hiragino Sans…

【WPF】布局容器/面板总结XAML-Panel控件

Panel元素是控制元素呈现&#xff08;大小、尺寸、位置、字内容排列&#xff09;的组件。 常用布局容器 Grid 用于创建网格区域&#xff08;行列&#xff09; // 在Grid里面使用 //定义列的数量 <Grid.ColumnDefinitions><ColumnDefinition /> </Grid.Colum…

Codeforces Round 106 D. Coloring Brackets 【区间DP + 记忆化搜索实现】

D. Coloring Brackets 约定 ∣ S ∣ ≤ 700 |S| \leq 700 ∣S∣≤700 题意 给定一个正则括号序列 s s s&#xff0c;我们需要求出合法的染色方案数。合法的条件为&#xff1a; 每个符号要么不染色&#xff0c;要么染红色&#xff0c;要么染蓝色对于每对配对的括号&#xf…

(十八)springboot实战——spring securtity注解方式的授权流程源码解析

前言 在上一节内容中&#xff0c;我们介绍了如何在FilterSecurityInterceptor过滤器中处理用户的授权流程&#xff0c;并分析了其源码&#xff0c;spring security还提供了方法级别的授权方式&#xff0c;通过EnableMethodSecurity注解启用权限认证流程&#xff0c;只需要在方…

Ivanti Pulse Connect Secure VPN SSRF(CVE-2023-46805)漏洞

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…

Failed to construct ‘RTCIceCandidate‘ sdpMid and sdpMLineIndex are both null

最近在搞webrtc&#xff0c;在编写函数处理远端传递来的candidate时报错了&#xff0c;具体信息如下。国内关于webrtc的资料很少&#xff0c;所以去国外社区转了一圈&#xff0c;回来记录一下报错的解决方案 其实这个bug也好解决&#xff0c;根据报错信息可以判断是RTCIceCand…

Java 学习和实践笔记(5)

三种类型的变量&#xff1a; Java中常量的定义&#xff1a; 下面的这个加号表示连接的意思&#xff0c;也就是把前面的字符串常量和后面的变量值在显示时连在一起&#xff1a; 显示效果如下&#xff1a; 如果没有用这个加号&#xff0c;就会报错&#xff1a;

微信小程序(四十)API的封装与调用

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.在单独的js文件中写js接口 2.以注册为全局wx的方式调用接口 源码&#xff1a; utils/testAPI.js const testAPI{/*** * param {*} title */simpleToast(title提示){//可传参&#xff0c;默认为‘提示’wx.sho…

前端 > JS 笔试题面试考题(11-15)

说明正则表达式给所有string对象添加去除首尾空白符的方法&#xff08;trim方法&#xff09; &#xff1f; 面试通过率&#xff1a;85.0% 推荐指数&#xff1a; ★★★ 试题难度&#xff1a; 初级 试题类型&#xff1a; 编程题 <script>Object.prototype.trim function…

【FPGA】Verilog:奇偶校验位发生器 | 奇偶校验位校验器

目录 0x00 奇偶校验位发生器 0x01 奇偶校验位校验器 0x02 错误检测器和纠错器

第三百一十七回

文章目录 1. 概念介绍2. 实现方法2.1 hintText2.2 labelText2.3 controller 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何在输入框中处理光标"相关的内容&#xff0c;本章回中将介绍如何添加输入框默认值.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1.…

treeData 树结构数据处理(react)

1.什么是tree 树(tree)形结构是一种重要的非线性结构&#xff0c;依据分支关系定义的层次结构&#xff0c;在这种结构中&#xff0c;每个元素至多只有一个前趋&#xff0c;但可以有多个后继。 树的定义&#xff1a;树(Tree)是n(n 大于等于0)个节点的有限集合T&#xff0c;当n0…

常用工具类-Collections

常用工具类-Collections 排序操作查找操作填充操作判断集合是否有交集不可变集合 java.util.Collections类是一个工具类&#xff0c;它包含了一些静态方法&#xff0c;用于操作集合&#xff08;如列表和映射&#xff09;。这个类主要用于创建不可修改的集合、填充集合、替换元素…

C++模版(初阶)

&#x1f308;函数复用的两种不恰当方式 ☀️1.函数重载 以Swap函数为例&#xff0c;有多少种参数类型组合&#xff0c;就要重载多少个函数&#xff1a; void Swap(int& left, int& right) {int temp left;left right;right temp; } void Swap(double& left,…

材料非线性Matlab有限元编程:切线刚度法

导读:本文主要围绕材料非线性问题的有限元Matlab编程求解进行介绍,重点围绕牛顿-拉普森法(切线刚度法)、初应力法、初应变法等三种非线性迭代方法的算法原理展开讲解,最后利用Matlab对材料非线性问题有限元迭代求解算法进行实现,展示了实现求解的核心代码。这些内容都将收…

[word] word中怎么插入另外一个word文档 #媒体#职场发展

word中怎么插入另外一个word文档 word中怎么插入另外一个word文档&#xff1f;有有些小伙伴在制作文档的时候&#xff0c;可能需要用到多个文档进行配合制作&#xff0c;今天小Q来给大家演示一下&#xff0c;插入Word文档的方法&#xff0c;插入其他类型文档的方法也是一样的。…

【Java八股面试系列】JVM-class文件结构

Class文件结构总结 根据 Java 虚拟机规范&#xff0c;Class 文件通过 ClassFile 定义&#xff0c;有点类似 C 语言的结构体。我们之前都是使用javap命令来对字节码文件进行反编译查看的&#xff0c;我们可以使用WinHex软件&#xff08;Mac平台可以使用010 Editor&#xff09;来…