SQL模糊查询排序问题

Posted 漫步CODE人生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL模糊查询排序问题相关的知识,希望对你有一定的参考价值。

 
 

需求描述

  • 查询表中名字带指定关键字的数据
  • 完全匹配放在第一位
  • 前匹配放在第二位
  • 末尾匹配放在第三位
  • 中间匹配放在第四位

建表

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;

查询结果为: 
技术分享图片 
等于说额外添加了一个虚拟列,来辅助进行排序; 
首先匹配完全==的,然后再按照规则匹配下一条数据,就能得到我们想要的结果了。

 
 
 







以上是关于SQL模糊查询排序问题的主要内容,如果未能解决你的问题,请参考以下文章

Sql优化-多like模糊查询及根据时间排序

Mysql模糊查询,按相似度排序

SQL模糊查询排序问题

MySQL基础篇之基础查询条件查询模糊查询排序查询

2016/3/13 七种查询 (普通查询 条件查询 排序查询 模糊查询 统计查询 分组查询 分页查询 )

mybatis模糊查询防止SQL注入