如果没有自动递增ID列,如何获取上一条和下一条记录?

时间:2012-05-25 20:09:35

标签: php mysql

想象一下,我有一个名为 fruits 的表,如下所示。

  |   id    |    fruit     |   colour    |
  |--------------------------------------|
1 |  ptiru  |    Grape     |  Green/Red  |
2 |  wlk3b  |    Banana    |   Yellow    |
3 |  i9nuc  |  Strawberry  |     Red     |

让我们关注ID列。你可以看到它不是一个自动递增的整数,每次增加+1。但相反,它是5个数字/字母的随机组合。

如果我选择了第二条记录(香蕉),我将如何选择上一条记录(葡萄)和下一条记录(草莓)?

不能等待答案;)谢谢!

4 个答案:

答案 0 :(得分:1)

在循环之前将变量设置为0 ($i = 0),这将在循环($i++)内递增。增加值后,使用mysql_data_seek($result,$i)获取下一条记录,或使用前一条记录的mysql_data_seek($result,($i - 2))

答案 1 :(得分:0)

在这里走出困境,因为我从来没有见过这样的事情,但我会说" id"列不是真正的id ...它可能是一个唯一的密钥,但不是真正的ID。我添加一个自动增量的列并从那里开始....

答案 2 :(得分:0)

SELECT @rownum := @rownum AS position, f.* from fruits f, (select @rownum:=0 r ) r

此查询将为您提供如下结果集:

+----------+-------+------------+
| position | id    | fruit      |
+----------+-------+------------+
|        1 | ptiru | Grape      |
|        2 | wlk3b | Banana     |
|        3 | i9nuc | Strawberry |
+----------+-------+------------+

然后,您可以在代码中的数组中加载它们,并根据需要使用索引查找下一个/上一个水果。

答案 3 :(得分:0)

经过一些阅读后,你将无法做到这一点,因为订单不一定是相同的。

当你创建一个带有索引或PK的表时,你的行会有一个订单,你没有指定你是否有一个,也没有指定哪一行,所以可能你没有。

当您创建没有索引的表并开始插入时,最后一个插入将显示为最后一个,但如果您进行一些修改,行将更改位置,请查看此link

所以如果你想知道之前什么是“香蕉”添加一个索引,它将按顺序排序,或者如果你想按Random排序并获得值,最好的方法是使用存储过程或函数,游标和变量。

问候