このように行を並べ替えるにはどうすればよいですか:
数値 ID を持つこれらの行がある場合:
1 | 2 | 3 | 100 | 4
クエリは次のように並べ替えます。
1 | 2 | 3 | 4 | 5
ID 100の行を4に更新し、ID 4の行 を5に更新する
言い換えると
順番になっていない行を更新しています。
mysql> create table t (i int);
mysql> insert into t values (1), (2), (3), (100), (4);
mysql> select * from t;
+------+
| i |
+------+
| 1 |
| 2 |
| 3 |
| 100 |
| 4 |
+------+
mysql> set @seq := 0;
mysql> update t set i = (@seq:=@seq+1);
Rows matched: 5 Changed: 2 Warnings: 0
mysql> select * from t;
+------+
| i |
+------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
+------+
@ChristianKuetbach からのコメントは良い点です。質問が求めることを達成する方法に答えましたが、これらの ID 値がテーブルの主キー用であるかどうかについての質問は明確ではありませんでした。
これらの値が主キー ID である場合は、説明している方法で番号を付け直すことを再検討する必要があります。主キーの値は一意である必要がありますが、連続していてはなりません。自動生成された数字が連続していたり、順番が合っていたりすることに決して依存しないでください。ID を生成する DELETE、ROLLBACK、または失敗した INSERT が原因で、常に不足している番号を取得できます。ID を強制的に並べ替えようとするのは無意味であり、データ参照の混乱を招く可能性があります。