imherer

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

  •  
  •   imherer · May 5, 2019 · 3388 views
    This topic created in 2567 days ago, the information mentioned may be changed or developed.

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

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

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

    5 replies    2019-05-29 21:28:59 +08:00
    pubby
        1
    pubby  
       May 5, 2019 via Android   ❤️ 1
    count where score>myscore ?
    imherer
        2
    imherer  
    OP
       May 5, 2019
    @pubby 好像可行,谢谢,我试试!
    Raymon111111
        3
    Raymon111111  
       May 5, 2019
    1 楼那个方法和全表扫描没区别, 就算在 score 上建了索引也不行

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

    SELECT id, score, RANK() OVER (ORDER BY score) FROM table_name LIMIT 10 OFFSET 10;
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1143 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 23:37 · PVG 07:37 · LAX 16:37 · JFK 19:37
    ♥ Do have faith in what you're doing.