Mysql 如何在排名查询中实现分页?
我正在尝试用MySQL实现排名。我发现了一篇关于它的好文章,没有使用自连接() 关于这一点,我将有很多排名,最好添加分页功能。Mysql 如何在排名查询中实现分页?,mysql,pagination,Mysql,Pagination,我正在尝试用MySQL实现排名。我发现了一篇关于它的好文章,没有使用自连接() 关于这一点,我将有很多排名,最好添加分页功能。 第一个想法是使用LIMIT,但它失败了(排名没有继续,所以它又以一开始) 我不能用这个限制来翻倍页面,因为它有可能多次得分 如何使用查询实现分页?您可以通过添加外部查询来实现类似于LIMIT的分页,如下所示: SELECT score_id, student_name, score, rank FROM (SELECT score_id, student_nam
第一个想法是使用
LIMIT
,但它失败了(排名没有继续,所以它又以一开始)
我不能用这个限制来翻倍页面,因为它有可能多次得分
如何使用查询实现分页?您可以通过添加外部查询来实现类似于LIMIT的分页,如下所示:
SELECT score_id, student_name, score, rank
FROM
(SELECT
score_id, student_name, score,
@prev := @curr,
@curr := score,
@rank := IF(@prev = @curr, @rank, @rank+1) AS rank
FROM
score,
(SELECT @curr := null, @prev := null, @rank := 0) sel1
ORDER BY score DESC) AS b
WHERE rank BETWEEN 1 AND 10
然后,您可以在11到20之间执行
,等后续页面。可能不是最好的方法,但它是一种方法:)我找到了另一种适合我的解决方案
我在表中添加了一个新的列rank,并使用UPDATE
查询计算排名
UPDATE score s, (
SELECT
score_id, student_name, score,
@prev := @curr,
@curr := score,
@rank := IF(@prev = @curr, @rank, @rank+1) AS rank
FROM
score,
(SELECT @curr := null, @prev := null, @rank := 0) sel1
ORDER BY score DESC
) r
SET s.rank = r.rank WHERE s.score_id = r.score_id
现在,很容易限制结果。Doh。。。我的想法太复杂了,但我们会看看是否有“更好”的方法有趣的是,目前还没有其他答案。看来你的方式是“最好的”。)
UPDATE score s, (
SELECT
score_id, student_name, score,
@prev := @curr,
@curr := score,
@rank := IF(@prev = @curr, @rank, @rank+1) AS rank
FROM
score,
(SELECT @curr := null, @prev := null, @rank := 0) sel1
ORDER BY score DESC
) r
SET s.rank = r.rank WHERE s.score_id = r.score_id