说我有一张桌子
name rank
-----------------------
John 1
Tit 3
Bernard 4
排名2缺失,可能已删除或其他任何内容。我需要一个查询来增加排名字段。因此,约翰将成为第一,但是现在是第2名,而伯纳德则是第3名。
可能有多达100个等级,有几个失踪。只要最小的等级被重置为数字1,并且所有后续增量,它应该是好的。
有什么想法吗?
更新排名字段的查询。
答案 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