5

说我有一张桌子

name             rank
-----------------------
John             1
Tit              3
Bernard          4

Rank 2 丢失,可能已被删除或其他什么。我需要一个查询来增加排名字段。所以约翰是第一名,但蒂特现在是第二名,伯纳德是第三名。

任何地方都可能有多达 100 个等级,还有几个缺失。只要最小的等级被重置为数字 1,并且所有跟随增量,它应该是好的。

有任何想法吗?

用于更新排名字段的查询。

4

2 回答 2

6

这将更新 rank 字段,使其在没有漏洞的情况下递增:

SET @i := 0;
UPDATE tbl SET rank = @i:=@i+1 ORDER BY rank;
于 2012-07-06T10:13:20.940 回答
2

您可以在不使用外部变量的情况下做到这一点:

UPDATE tbl a
INNER JOIN
(
    SELECT a.name, a.rank, COUNT(*) AS newrank
    FROM tbl a
    INNER JOIN tbl b ON a.rank >= b.rank
    GROUP BY a.rank
) b ON a.name = b.name AND a.rank = b.rank
SET a.rank = b.newrank 
于 2012-07-06T10:12:18.753 回答