每天学习一点点 编程PDF电子书、视频教程免费下载:http://www.shitanlife.com/code
需求描述
查询表中名字带指定关键字的数据完全匹配放在第一位前匹配放在第二位末尾匹配放在第三位中间匹配放在第四位
建表
DROP TABLE IF EXISTS `t_user`; CREATE TABLE `t_user` ( `id` varchar(20) NOT NULL, `name` varchar(20) DEFAULT NULL, `password` varchar(20) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
初始数据
insert into t_user values(1,'汪峰','888888'); insert into t_user values(2,'王汪峰','888888'); insert into t_user values(3,'汪峰峰','888888'); insert into t_user values(4,'欧阳汪峰','888888'); insert into t_user values(5,'王汪峰峰','888888');
直接like查询
select * from t_user where name like '%汪峰%';
1
结果为: 可以发现,“汪峰峰”并没有排列在“王汪峰”前面
使用case when进行辅助排序
select * from t_user f where f.name like '%汪峰%' order by (case when f.name = '汪峰' then 1 when f.name like '汪峰%' then 2 when f.name like '%汪峰' then 3 when f.name like '%汪峰%' then 4 else 0 end ) limit 0,50;
查询结果为: 等于说额外添加了一个虚拟列,来辅助进行排序; 首先匹配完全==的,然后再按照规则匹配下一条数据,就能得到我们想要的结果了。
每天学习一点点 编程PDF电子书、视频教程免费下载:http://www.shitanlife.com/code
转载于:https://www.cnblogs.com/scode2/p/9065946.html
相关资源:sql模糊查询并按匹配度排序