我正在尝试创建一个“上一个”和一个“下一个”按钮,显示 1 条上一条记录和 1 条下一条记录,由 sql 语句生成。
但是,id 不是简单的 -1 和 +1,这意味着如果这个记录 id 是 40,那么前一个 id 可能是 31,而下一个 id 可能是 43。
是否有任何sql函数可以让我实现这个目标?谢谢!
选择下一个 id:
SELECT * FROM your_table WHERE your_id>$current_id ORDER BY your_id ASC LIMIT 1
选择前一个 id:
SELECT * FROM your_table WHERE your_id<$current_id ORDER BY your_id DESC LIMIT 1
您应该使用限制子句并简单地跟踪要跳过的记录数。
例如,如果您在记录 10,limit 10,1
将跳过前 10 个并带回一个。“下一步”按钮会将查询更改为limit 11,1
等等。
只要您知道order by
(在这种情况下,ID 字段看起来很完美),每次都会以完全相同的顺序返回数据,因此您可以一次可靠地在结果集中向前和向后遍历一行。
从文档中截取:
LIMIT 子句可用于限制 SELECT 语句返回的行数。LIMIT 接受一个或两个数字参数,它们都必须是非负整数常量(使用准备好的语句时除外)。
有两个参数,第一个参数指定要返回的第一行的偏移量,第二个参数指定要返回的最大行数。初始行的偏移量为 0(不是 1):
SELECT * FROM tbl LIMIT 5,10; # Retrieve rows 6-15