需求描述
- 查詢表中名字帶指定關(guān)鍵字的數(shù)據(jù)
- 完全匹配放在第一位
- 前匹配放在第二位
- 末尾匹配放在第三位
- 中間匹配放在第四位
建表
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;
初始數(shù)據(jù)
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 '%汪峰%';
結(jié)果為:
01.png
可以發(fā)現(xiàn)含懊,“汪峰峰”并沒有排列在“王汪峰”前面
使用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;
查詢結(jié)果為:
02.png
等于說額外添加了一個虛擬列,來輔助進行排序馋没;
首先匹配完全==的,然后再按照規(guī)則匹配下一條數(shù)據(jù)躬翁,就能得到我們想要的結(jié)果了椎例。
備注
如果排序后,需要按照中文拼音的順序繼續(xù)排序敦锌,需要加上:
CONVERT(f.name USING gbk) COLLATE gbk_chinese_ci