一个 SQL 问题

301 天前
 nolog

有一个张用户表,现有一个需求,查询用户列表并需要将某些用户排序在前面: 排序:将名字中含有狮、将、鄢、金、香、道、泉、吉、玉、军、光、鄂、孝、木、孝、夏、凤、磁、都的用户排在前面

请教各位大佬这个怎么实现。

1948 次点击
所在节点    数据库
24 条回复
ysnow888
301 天前
写入的时候加个排序值吧
fisherman0459
301 天前
order by field
Fa11ingWood
301 天前
加个 rank 或者 level
nolog
301 天前
@Fa11ingWood
问了 gpt ,说是通过 ORDER BY CASE WHEN name LIKE '%狮%' OR name LIKE '%将%' THEN 0 ELSE 1 这样来实现
coolfly1
301 天前
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
301 天前
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;
ChoateYao
301 天前
能不能清洗数据,能的话加个字段用于排序。

不能的话,按照楼上的做,性能不能保证。
nolog
301 天前
@ysnow888
嗯,感觉这个合理
asmoker
301 天前
有意思,想了解下需求原因?😄
zhuoyue100
301 天前
你这不得加一个整型字段来做排序吗? 整型字段做一下映射排序值, 不然你光靠这几个没有规则的字怎么排序
aw2350
301 天前
这些是领导??
lstz
301 天前
case when 解君愁,不过性能会比较差些罢了
lkkl007
301 天前
什么吊需求都有
yuhuai
301 天前
这不合适,我和 3 楼看法一致,加字段,你不能以后每次多一个新规则就该一次 sql 或程序
yuhuai
301 天前
如果非要实现这种扭曲的需求,需要一个灵活的全局系统参数,新增用户时,通过参数的值判断是否包含某些字,给他排序字段赋值最高优先级
txzh007
301 天前
加字段把 搞个 sort 值,不然你这个排序的字不是固定的 那 gg
dyv9
300 天前
GPT 给的已经是好的方案了。性能不算差,想更快就需要动表结构。
andykuen959595
300 天前
最好加字段,然后再排序!主要看表的数量有多少,考虑性能!
nolog
300 天前
@asmoker 产品提的需求。
nolog
300 天前
@zhuoyue100 嗯,加排序字段了,但是就怕产品又改规则。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1011517

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX