首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在MySQL中获得下一个/前一个记录?

问如何在MySQL中获得下一个/前一个记录?
EN

Stack Overflow用户
提问于 2009-09-18 21:01:05
回答 23查看 257.6K关注 0票数 147

假设我有ID 3,4,7,9的记录

我希望能够通过导航从一个到另一个通过下一个/先前的链接。

问题是,我不知道如何用最近的高ID获取记录。

因此,当我使用ID 4获取记录时,需要能够获取下一个现有记录,即7。

查询可能类似于

代码语言:javascript
复制
SELECT * FROM foo WHERE id = 4 OFFSET 1

如何在不获取整个结果集和手动迭代的情况下获取下一条/上一条记录?

我使用的是MySQL 5。

EN

回答 23

Stack Overflow用户

回答已采纳

发布于 2009-09-18 21:03:56

下一步:

代码语言:javascript
复制
select * from foo where id = (select min(id) from foo where id > 4)

以前:

代码语言:javascript
复制
select * from foo where id = (select max(id) from foo where id < 4)
票数 294
EN

Stack Overflow用户

发布于 2009-09-18 21:23:18

除了cemkalyoncu's解决方案之外:

下一个记录:

代码语言:javascript
复制
SELECT * FROM foo WHERE id > 4 ORDER BY id LIMIT 1;

以前的记录:

代码语言:javascript
复制
SELECT * FROM foo WHERE id < 4 ORDER BY id DESC LIMIT 1;

编辑:由于这个答案最近得到了一些改进,我很想强调前面提到的comment I made,了解主键colum并不意味着作为一个列进行排序,因为MySQL并不保证在以后一定要添加更高的、自动递增的值。

如果您不关心这一点,只需要使用更高(或更低) id的记录,那么这就足够了。只是不要将此作为确定记录是否在以后(或之前)实际添加的一种手段。相反,考虑使用datetime列进行排序,例如。

票数 155
EN

Stack Overflow用户

发布于 2013-04-13 20:58:32

所有上述解决方案都需要两个数据库调用。下面的sql代码将两个sql语句合并为一个。

代码语言:javascript
复制
select * from foo 
where ( 
        id = IFNULL((select min(id) from foo where id > 4),0) 
        or  id = IFNULL((select max(id) from foo where id < 4),0)
      )    
票数 65
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1446821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档