如下表结构如何效率的获得自己的排名?

2019-05-05 10:24:20 +08:00
 imherer

表里主要有uidscore 两个字段,根据 score 来排名,但是表里的记录是无序的

分页获取的话直接用ORDER BY LIMIT x OFFSET x就行了,但是如何获得自己的排名呢?

只能获取分页数据的时候扫描全表直到扫到自己的排名为止吗?

2889 次点击
所在节点    PostgreSQL
5 条回复
pubby
2019-05-05 10:32:13 +08:00
count where score>myscore ?
imherer
2019-05-05 11:01:39 +08:00
@pubby 好像可行,谢谢,我试试!
Raymon111111
2019-05-05 15:26:39 +08:00
1 楼那个方法和全表扫描没区别, 就算在 score 上建了索引也不行

最好的办法是排行榜 15 分钟刷新一次, 然后定时任务 15 分钟全扫一遍把排名统计出来放在缓存里
imherer
2019-05-06 10:40:55 +08:00
@Raymon111111 嗯。之前也做过类似的需求,结合 redis 做起来就很简单。
现在这个是帮人弄的一个小项目,用户很少。 所以就不想用 redis 了,直接用数据库来做了。
japinli
2019-05-29 21:28:59 +08:00
用窗口函数可以不行吗?

SELECT id, score, RANK() OVER (ORDER BY score) FROM table_name LIMIT 10 OFFSET 10;

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

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

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

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

© 2021 V2EX