2012-07-06 45 views
5

说我有一个表MySQL的排序字段增值

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

等级2缺失,可能已被删除或别的什么东西。我需要一个查询来增加排名字段。所以John会是第一名,但是现在Tit会是第二名,而伯纳德3.

可能有任何地方最多有100个等级,还有几个失踪。只要最小的等级重新设置为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