一个 SQL 问题

查看 105|回复 6
作者:nolog   
有一个张用户表,现有一个需求,查询用户列表并需要将某些用户排序在前面:
排序:将名字中含有狮、将、鄢、金、香、道、泉、吉、玉、军、光、鄂、孝、木、孝、夏、凤、磁、都的用户排在前面
请教各位大佬这个怎么实现。

排序, 用户表, SQL, 用户

ysnow888   
写入的时候加个排序值吧
fisherman0459   
order by field
Fa11ingWood   
加个 rank 或者 level
nolog
OP
  
@Fa11ingWood
问了 gpt ,说是通过 ORDER BY CASE WHEN name LIKE '%狮%' OR name LIKE '%将%' THEN 0 ELSE 1 这样来实现
coolfly1   
SELECT * FROM 用户表
ORDER BY
CASE
WHEN 名字 LIKE '%狮%' THEN 1
WHEN 名字 LIKE '%将%' THEN 2
WHEN 名字 LIKE '%鄢%' THEN 3
WHEN 名字 LIKE '%金%' THEN 4
WHEN 名字 LIKE '%香%' THEN 5
WHEN 名字 LIKE '%道%' THEN 6
WHEN 名字 LIKE '%泉%' THEN 7
WHEN 名字 LIKE '%吉%' THEN 8
WHEN 名字 LIKE '%玉%' THEN 9
WHEN 名字 LIKE '%军%' THEN 10
WHEN 名字 LIKE '%光%' THEN 11
WHEN 名字 LIKE '%鄂%' THEN 12
WHEN 名字 LIKE '%孝%' THEN 13
WHEN 名字 LIKE '%木%' THEN 14
WHEN 名字 LIKE '%夏%' THEN 15
WHEN 名字 LIKE '%凤%' THEN 16
WHEN 名字 LIKE '%磁%' THEN 17
WHEN 名字 LIKE '%都%' THEN 18
ELSE 19
END;
只不过这种写法性能可能不太好,可以考虑先查结果,然后在程序里返回前排序
coinbase   
SELECT *
FROM users
ORDER BY
CASE
WHEN name LIKE '%狮%' THEN 1
WHEN name LIKE '%将%' THEN 1
WHEN name LIKE '%鄢%' THEN 1
WHEN name LIKE '%金%' THEN 1
WHEN name LIKE '%香%' THEN 1
WHEN name LIKE '%道%' THEN 1
WHEN name LIKE '%泉%' THEN 1
WHEN name LIKE '%吉%' THEN 1
WHEN name LIKE '%玉%' THEN 1
WHEN name LIKE '%军%' THEN 1
WHEN name LIKE '%光%' THEN 1
WHEN name LIKE '%鄂%' THEN 1
WHEN name LIKE '%孝%' THEN 1
WHEN name LIKE '%木%' THEN 1
WHEN name LIKE '%夏%' THEN 1
WHEN name LIKE '%凤%' THEN 1
WHEN name LIKE '%磁%' THEN 1
WHEN name LIKE '%都%' THEN 1
ELSE 2
END,
name;
您需要登录后才可以回帖 登录 | 立即注册

返回顶部