Php 如何选择id仅在间隙上方一个的行

Php 如何选择id仅在间隙上方一个的行,php,mysql,gaps-in-data,Php,Mysql,Gaps In Data,我有一个包含列id和列名称的表。我的重点是id的顺序。事实上,当数字的id顺序中断时,我想要选择行。看看我的例子: // mytable +----+-----------+ | id | name | +----+-----------+ | 1 | ali | | 2 | jack | | 3 | peter | | 5 | steve | | 6 | lenord | | 7 | jack | | 9 | f

我有一个包含列id和列名称的表。我的重点是id的顺序。事实上,当数字的id顺序中断时,我想要选择行。看看我的例子:

// mytable
+----+-----------+
| id |    name   |
+----+-----------+
| 1  |   ali     |
| 2  |   jack    |
| 3  |   peter   |
| 5  |   steve   |
| 6  |   lenord  |
| 7  |   jack    |
| 9  |   fered   |
+----+-----------+
现在我想选择id=5和id=9的位置。因为id=4和id=8被删除

编辑:我想要这个输出:


我可以这样做吗

尝试查找特定ID。


事实上,您想要的是id仅比缺少的id高一个的记录;因此,您需要搜索id为的记录,以便id-1不存在。对于最低id,这将始终是这种情况,因此我们必须明确排除id=1


您的意思是id=4被删除了吗?id=5在您的样本中仍然有效。是的,您可以使用一些难看的查询来查看表中的其他行。@MarcB完全正确。那我就可以做到了。无论如何,如果您在查询中调用一个不存在的ID,您将不会得到结果。因此,如果查询存在的ID,将得到结果。行与数组不同。除非你告诉他们这样做,否则他们不会被编入索引。当您删除一行时,ID列的值不会改变。@扭曲,那么这是不可能的?我想我误解了您的目标。您希望在删除其他行后收集位置4 ID 5和位置7 ID 9的行。这是可以做到的。您是否手动查找?实际上,我的表有+10000行。我需要一个自动算法。顺便说一句,数据搜索;只是为了mysqli?我正在使用PDO,但您没有澄清您使用的函数。你没有详细解释这个问题。哦,我的上帝!!!怎样我以为我懂sql,但是。。。!!!谢谢只是我不明白,能给我解释一下你的代码吗?!有一个新的问题,为什么我不能用NOT IN代替NOT EXISTS?你可能可以,但为什么你应该?我检查了它,没有工作,没有强制要求。我只是想知道为什么不在不起作用?!我检查了您的代码,没有看到id和name两列包含NULL。那是什么?如果选择x*,则我认为不会有更多的两列。
// mytable
+----+-----------+
| id |    name   |
+----+-----------+
| 5  |   steve   |
| 9  |   fered   |
+----+-----------+
<?php
/* Open a connection */
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$query = "SELECT id, name FROM table";
if ($result = $mysqli->query($query)) {

    /* seek to row no. 4 */
    $result->data_seek(3);

    /* fetch row */
    $row = $result->fetch_row();

    printf ("ID: %s  Name: %s\n", $row[0], $row[1]);

    /* seek to row no. 7 */
    $result->data_seek(6);

    /* fetch row */
    $row = $result->fetch_row();

    printf ("ID: %s  Name: %s\n", $row[0], $row[1]);

    /* free result set*/
    $result->close();
}

/* close connection */
$mysqli->close();
?>
ID: 5 Name: steve
ID: 9 Name: fered
SELECT *
FROM the_table tt
WHERE id > 1
AND NOT EXISTS (
   SELECT *
   FROM the_table nx
   WHERE nx.id = tt.id -1
   );
SELECT x.*
  FROM my_table x 
  LEFT 
  JOIN my_table y 
    ON y.id = x.id - 1 
 WHERE y.id IS NULL 
   AND x.id > 1;
+----+-------+
| id | name  |
+----+-------+
|  5 | steve | 
|  9 | fered | 
+----+-------+