5

私はテーブルを持っていると言う

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

ランク 2 がありません。削除された可能性があります。ランク フィールドをインクリメントするクエリが必要です。したがって、ジョンが 1 番になりますが、ティットが 2 番になり、バーナードが 3 番になります。

ランクは 100 までどこにでもある可能性があり、いくつかのランクが欠落している可能性があります。最小のランクが番号 1 にリセットされ、それに続くすべてがインクリメントされる限り、それは良いはずです。

何か案は?

ランク フィールドを更新するクエリ。

4

2 に答える 2

6

これにより、ランク フィールドが更新され、ホールなしでインクリメントされます。

SET @i := 0;
UPDATE tbl SET rank = @i:=@i+1 ORDER BY rank;
于 2012-07-06T10:13:20.940 に答える
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 
于 2012-07-06T10:12:18.753 に答える