有一个张用户表,现有一个需求,查询用户列表并需要将某些用户排序在前面: 排序:将名字中含有狮、将、鄢、金、香、道、泉、吉、玉、军、光、鄂、孝、木、孝、夏、凤、磁、都的用户排在前面
请教各位大佬这个怎么实现。
1
ysnow888 308 天前
写入的时候加个排序值吧
|
2
fisherman0459 308 天前
order by field
|
3
Fa11ingWood 308 天前
加个 rank 或者 level
|
4
nolog OP @Fa11ingWood
问了 gpt ,说是通过 ORDER BY CASE WHEN name LIKE '%狮%' OR name LIKE '%将%' THEN 0 ELSE 1 这样来实现 |
5
coolfly1 308 天前
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; 只不过这种写法性能可能不太好,可以考虑先查结果,然后在程序里返回前排序 |
6
coinbase 308 天前
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; |
7
ChoateYao 308 天前
能不能清洗数据,能的话加个字段用于排序。
不能的话,按照楼上的做,性能不能保证。 |
9
asmoker 308 天前
有意思,想了解下需求原因?😄
|
10
zhuoyue100 308 天前
你这不得加一个整型字段来做排序吗? 整型字段做一下映射排序值, 不然你光靠这几个没有规则的字怎么排序
|
11
aw2350 308 天前
这些是领导??
|
12
lstz 308 天前 via Android
case when 解君愁,不过性能会比较差些罢了
|
13
lkkl007 308 天前
什么吊需求都有
|
14
yuhuai 308 天前
这不合适,我和 3 楼看法一致,加字段,你不能以后每次多一个新规则就该一次 sql 或程序
|
15
yuhuai 308 天前
如果非要实现这种扭曲的需求,需要一个灵活的全局系统参数,新增用户时,通过参数的值判断是否包含某些字,给他排序字段赋值最高优先级
|
16
txzh007 308 天前
加字段把 搞个 sort 值,不然你这个排序的字不是固定的 那 gg
|
17
dyv9 308 天前 via Android
GPT 给的已经是好的方案了。性能不算差,想更快就需要动表结构。
|
18
andykuen959595 308 天前
最好加字段,然后再排序!主要看表的数量有多少,考虑性能!
|
20
nolog OP @zhuoyue100 嗯,加排序字段了,但是就怕产品又改规则。
|
21
Habyss 307 天前
先搞定这个需求, 加 sort 字段, 然后根据规则初始化跑一下, 后续新增数据根据规则设置 sort
如果之后这个规则要改的话, 就是另一个需求了, 规则可配置... 到时候再想方案呗, 就把规则抽出来搞个 mapping, xxx-1,sss-2, 根据配置规则映射 sort, |
22
langhuishan 307 天前
@aw2350 年终奖抽检,大奖给领导
|