表里主要有uid
和score
两个字段,根据 score 来排名,但是表里的记录是无序的
分页获取的话直接用ORDER BY LIMIT x OFFSET x
就行了,但是如何获得自己的排名呢?
只能获取分页数据的时候扫描全表直到扫到自己的排名为止吗?
1
pubby 2019-05-05 10:32:13 +08:00 via Android 1
count where score>myscore ?
|
3
Raymon111111 2019-05-05 15:26:39 +08:00
1 楼那个方法和全表扫描没区别, 就算在 score 上建了索引也不行
最好的办法是排行榜 15 分钟刷新一次, 然后定时任务 15 分钟全扫一遍把排名统计出来放在缓存里 |
4
imherer OP @Raymon111111 嗯。之前也做过类似的需求,结合 redis 做起来就很简单。
现在这个是帮人弄的一个小项目,用户很少。 所以就不想用 redis 了,直接用数据库来做了。 |
5
japinli 2019-05-29 21:28:59 +08:00
用窗口函数可以不行吗?
SELECT id, score, RANK() OVER (ORDER BY score) FROM table_name LIMIT 10 OFFSET 10; |