如何在结果集中获取“下一行”和“上一行”,而不选择整个结果集?

时间:2012-04-11 10:27:00

标签: mysql sql database

是否有正确的方法:

ID | name
 1 | aa
 4 | bb
 6 | dd
 9 | ee

ID是auto_increment的主索引...缺少索引由SQL删除,因此有一些空格

如果我在页面中导航?ID = 4我想使用相同的查询获取上一行(ID为1)和下一行(ID为6)(添加:)

有没有办法在不选择/遍历整个结果集的情况下执行此操作?

提前谢谢你!

3 个答案:

答案 0 :(得分:3)

我会做这样的事情(以前的记录):

SELECT * FROM table
WHERE id < @id
ORDER BY id DESC
LIMIT 1

这应该足以让数据库引擎优化查询。

答案 1 :(得分:3)

SELECT * from table where `ID` > 4 ORDER BY `ID` ASC LIMIT 1 /* next */
SELECT * from table where `ID` < 4 ORDER BY `ID` DESC LIMIT 1 /* previous */

答案 2 :(得分:2)

试一试 -

(SELECT * FROM table_name
WHERE id < 4
ORDER BY id DESC
LIMIT 1)
union 
(SELECT * FROM table_name
WHERE id > 4
ORDER BY id ASC
LIMIT 1)