我的mysql数据库中有一个名为'rank'的字段。
我想运行一个简单的查询或php循环来检查所有行中此字段中是否有从1开始的增量。与行的顺序无关,只要有一行'rank'为1,另一行为2,另一行为3等等。
如果序列中断,我会运行一些代码,所以我只是寻求最资源友好的检查方式的帮助。
还需要排名为1的行。
答案 0 :(得分:0)
如果排名1存在,这将返回一行0作为missingrank,除了missingrank 0之外的任何行都缺少排名。
SELECT T.ID - 1 AS [MISSINGRANK]
FROM URTABLE T
LEFT JOIN URTABLE T2 ON T.rank = T2.rank + 1
WHERE T2.ID IS NULL
答案 1 :(得分: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)
我不知道这是不是你想要的(我在本地主机上试过),其中break意味着actor_id已经破坏了auto_auto_increment,你可以添加group by,order by等,无论你需要什么