为了账号安全,请及时绑定邮箱和手机立即绑定

如何在MySQL中获取下一个/上一个记录?

如何在MySQL中获取下一个/上一个记录?

拉莫斯之舞 2019-07-25 19:51:05
如何在MySQL中获取下一个/上一个记录?假设我有ID 3,4,7,9的记录,我希望能够通过下一个/上一个链接导航从一个到另一个。问题是,我不知道如何获取最近的更高ID的记录。因此,当我有一个ID为4的记录时,我需要能够获取下一个现有记录,这将是7.查询可能看起来像SELECT * FROM foo WHERE id = 4 OFFSET 1如何在不获取整个结果集并手动迭代的情况下获取下一个/上一个记录?我正在使用MySQL 5。
查看完整描述

3 回答

?
烙印99

TA贡献1829条经验 获得超13个赞

除了cemkalyoncu的解决方案:

下一条记录:

SELECT * FROM foo WHERE id > 4 ORDER BY id LIMIT 1;

之前的纪录:

SELECT * FROM foo WHERE id < 4 ORDER BY id DESC LIMIT 1;

编辑:由于这个答案最近得到了一些upvotes,我真的想强调之前的关于理解主键列不是要排序的列的评论,因为MySQL不保证更高,自动递增,值必须在以后添加。

如果你不关心这个,只需要更高(或更低)的记录,id那么这就足够了。只是不要将其用作确定记录是否实际在以后(或更早)添加的方法。例如,请考虑使用datetime列进行排序。


查看完整回答
反对 回复 2019-07-25
?
慕森卡

TA贡献1806条经验 获得超8个赞

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

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)
      )


查看完整回答
反对 回复 2019-07-25
?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

下一个:

select * from foo where id = (select min(id) from foo where id > 4)

以前:

select * from foo where id = (select max(id) from foo where id < 4)


查看完整回答
反对 回复 2019-07-25
  • 3 回答
  • 0 关注
  • 1079 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信