-3

mysqlデータベースに「rank」というフィールドがあります。

すべての行でこのフィールドの1から始まる増分があるかどうかをチェックする、可能な限り単純なクエリまたはphpループを実行したいと思います。'rank'が1、別の2、別の3などの行がある限り、行の順序は関係ありません。

シーケンスが中断した場合に実行するコードがあるので、リソースに最も適したチェック方法のヘルプを探しています。

ランク1の行も必要です。

4

2 に答える 2

0

これにより、ランク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
于 2012-07-06T18:50:04.703 に答える
0

これを見てください:

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などを追加できます。

于 2012-07-06T18:57:29.570 に答える