MySql 模糊查询,按匹配度排序
2023-09-27 14:21:32 时间
开始是产品提的需求,从来没用过模糊查询,还能带上匹配程度的。这个就像字符串匹配,应该不存在匹配度这个说法,因为匹配度如何定义也是一件复杂的事情,比如词语的同义等。但是用mysql来实现“伪匹配度”还是可行的。下边总结了几种思路:
![](http://upload-images.jianshu.io/upload_images/17900227-22de5ae1b1e546b7.png?imageMogr2/auto-orient/strip|imageView2/2/w/361)
数据
一、根据关键字出现的位置,给出不同的权重
比如只包含关键字的,权重最高。但是缺点也很明显,太粗糙。
SELECT *
FROM demo
WHERE c LIKE '%人民日报%'
ORDER BY
CASE
WHEN c LIKE '人民日报' THEN 0
WHEN c LIKE '人民日报%' THEN 1
WHEN c LIKE '%人民日报' THEN 3
ELSE 2
END
![](http://upload-images.jianshu.io/upload_images/17900227-1b10fb1e9610593c.png?imageMogr2/auto-orient/strip|imageView2/2/w/237)
不同权重
二、看长度
其实也很好理解,长度越短,说明里面匹配的字符越多
SELECT * FROM demo
WHERE c LIKE '%人民日报%'
ORDER BY length(c)
LIMIT 10
![](http://upload-images.jianshu.io/upload_images/17900227-ab0e5117b37c5371.png?imageMogr2/auto-orient/strip|imageView2/2/w/273)
剩余长度
但是不能避免出现多个关键字的情况,可以通过比例(剩余长度/长度),越小说明占比越大,匹配度越高:
SELECT *
FROM demo
WHERE c LIKE '%人民日报%'
ORDER BY length(REPLACE(c,'人民日报',''))/length(c)
LIMIT 10
作者:祖传编程
链接:https://www.jianshu.com/p/893676d6eae9
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
相关文章
- 将php和mysql命令加入到环境变量中
- 【MySQL高级】MySql中常用工具及Mysql 日志
- SQL Server分组连接并去重类似Mysql的Group_Concat功能实现
- MYSQL服务无法启动,提示信息1067解决办法
- mysql memcache
- MySQL 你可能忽视的选择问题
- Thinkphp错误-phpMyAdmin 尝试连接到 MySQL 服务器,但服务器拒绝连
- mysql排序
- 基于Java+MySQL实现(WinForm)客户管理系统【100010236】
- Mysql Order By 字符串排序,mysql 字符串order by
- mysql计算连续天数,mysql连续登录天数,连续天数统计
- 如何在 MySQL 中对选择查询获得的结果进行排序?
- 转 mysql 的推荐字符集 和 排序规则的使用介绍
- mysql datetime 排序
- [MySQL] 字符集和排序方式
- MySQL - 分组,排序,取出单独的年月日
- MySQL多表关联查询效率高点还是多次单表查询效率高,为什么?
- MySQL按中文拼音排序
- mysql按照首字母排序
- MySQL-视图