2012-07-06 66 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