2012-07-06 13 views
5

は私がMySQLのソートフィールドの増分値

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

はランク2が、削除された可能性が不足しているテーブルまたは何を持っていると言います。ランクフィールドをインクリメントするためのクエリが必要です。だからJohnは1位になりますが、Titは2位になり、Bernard 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