mysql排序字段增量值

时间:2012-07-06 10:02:50

标签: mysql increment

说我有一张桌子

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

排名2缺失,可能已删除或其他任何内容。我需要一个查询来增加排名字段。因此,约翰将成为第一,但是现在是第2名,而伯纳德则是第3名。

可能有多达100个等级,有几个失踪。只要最小的等级被重置为数字1,并且所有后续增量,它应该是好的。

有什么想法吗?

更新排名字段的查询。

2 个答案:

答案 0 :(得分:6)

这将更新排名字段,使其无孔增加:

SET @i := 0;
UPDATE tbl SET rank = @i:=@i+1 ORDER BY rank;

答案 1 :(得分: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