mysqlデータベースに「rank」というフィールドがあります。
すべての行でこのフィールドの1から始まる増分があるかどうかをチェックする、可能な限り単純なクエリまたはphpループを実行したいと思います。'rank'が1、別の2、別の3などの行がある限り、行の順序は関係ありません。
シーケンスが中断した場合に実行するコードがあるので、リソースに最も適したチェック方法のヘルプを探しています。
ランク1の行も必要です。
これにより、ランク1が存在する場合、missingrankとして0の行が返され、missingrank0以外の行は欠落ランクになります。
SELECT T.ID - 1 AS [MISSINGRANK]
FROM URTABLE T
LEFT JOIN URTABLE T2 ON T.rank = T2.rank + 1
WHERE T2.ID IS NULL
これを見てください:
mysql> set @a:=1;
mysql> select actor_id,if(@a<>actor_id,'break',@a),@a:=@a+1 from t2 order by actor_id;
+----------+-----------------------------+----------+
| actor_id | if(@a<>actor_id,'break',@a) | @a:=@a+1 |
+----------+-----------------------------+----------+
| 1 | 1 | 2 |
| 2 | 2 | 3 |
| 3 | 3 | 4 |
| 4 | 4 | 5 |
| 5 | 5 | 6 |
| 6 | 6 | 7 |
| 7 | 7 | 8 |
.....
| 99 | 99 | 100 |
| 101 | break | 101 |
| 102 | break | 102 |
| 103 | break | 103 |
| 104 | break | 104 |
| 105 | break | 105 |
+----------+-----------------------------+----------+
207 rows in set (0.00 sec)
それがあなたが望むものであるかどうかはわかりません(ローカルホストで試しました)。ここで、breaksは、actor_idがauto_auto_incrementを壊したことを意味します。必要に応じて、group by、orderbyなどを追加できます。