私はこのようなmySqlテーブルを持っています(簡略化)
Id*| Text | Pos (integer)
-----------
A | foo | 0
B | bar | 1
C | baz | 2
D | qux | 3
ここで、行を削除した後、残りの行のPos値を更新して、「穴」やギャップが見つからないようにします。
たとえば、Id ='C'の行が削除された場合、remaingテーブルは次のようになります。
Id*| Text | Pos (integer)
-----------
A | foo | 0
B | bar | 1
D | qux | 2
これは単一のクエリで可能ですか?
更新 受け入れられた答えに基づいて、これは私の問題の解決策でした:
START TRANSACTION;
SELECT @A:=pos FROM table_name WHERE Id= 'C';
DELETE FROM table_name WHERE Id = 'C';
UPDATE table_name SET Pos = Pos - 1 WHERE Pos > @A;
COMMIT;