-3

我的 mysql 数据库中有一个名为“rank”的字段。

我想运行一个尽可能简单的查询或 php 循环,检查所有行的该字段中是否存在从 1 开始的增量。行的顺序无关紧要,只要有一个“等级”为 1、另一个为 2、另一个为 3 等的行。

如果序列中有中断,我有一些代码要运行,所以我只是在寻找对资源最友好的检查方式的帮助。

还需要有一个等级为 1 的行。

4

2 回答 2

0

如果 rank 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
于 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)

我不知道这是否是您想要的(我在本地主机上尝试过),其中中断意味着 actor_id 已经破坏了 auto_auto_increment,您可以添加 group by 、 order by 等,无论您需要什么

于 2012-07-06T18:57:29.570 回答