分页查询排行榜
SELECT * FROM ( SELECT userId,( @rowNum := @rowNum + 1 ) AS rankNo
FROM
wf_member,(
SELECT
( @rowNum := 0 )) b
ORDER BY
studyTime DESC
) x
LIMIT 0,10
优化后可以直接在应用中迭代设置排名
LongAdder adder = new LongAdder();
//offset为limit的开始
adder.add(offset + 1);
vos.stream().forEach(vo -> {
vo.setRanking(adder.intValue());
adder.increment();
});
查询排名第几
SELECT rankNo FROM ( SELECT userId,( @rowNum := @rowNum + 1 ) AS rankNo
FROM
wf_member,(
SELECT
( @rowNum := 0 )) b
ORDER BY
studyTime DESC
) c
WHERE
userId = 123
该Rank函数方式耗时主要是对全表数据进行了排序,并且该字段没有索引,比较慢;
优化
查出比该字段大的数据数量+1即可:
SELECT
count(*) + 1
FROM
wf_member
WHERE
studyTime > ( SELECT studyTime FROM wf_member WHERE userId = 123)
本文由 GY 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为:
2022/04/06 13:59