假设我有ID 3,4,7,9的记录
我希望能够通过导航从一个到另一个通过下一个/先前的链接。
问题是,我不知道如何用最近的高ID获取记录。
因此,当我使用ID 4获取记录时,需要能够获取下一个现有记录,即7。
查询可能类似于
SELECT * FROM foo WHERE id = 4 OFFSET 1如何在不获取整个结果集和手动迭代的情况下获取下一条/上一条记录?
我使用的是MySQL 5。
发布于 2009-09-18 21:03:56
下一步:
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)发布于 2009-09-18 21:23:18
除了cemkalyoncu's解决方案之外:
下一个记录:
SELECT * FROM foo WHERE id > 4 ORDER BY id LIMIT 1;以前的记录:
SELECT * FROM foo WHERE id < 4 ORDER BY id DESC LIMIT 1;编辑:由于这个答案最近得到了一些改进,我很想强调前面提到的comment I made,了解主键colum并不意味着作为一个列进行排序,因为MySQL并不保证在以后一定要添加更高的、自动递增的值。
如果您不关心这一点,只需要使用更高(或更低) id的记录,那么这就足够了。只是不要将此作为确定记录是否在以后(或之前)实际添加的一种手段。相反,考虑使用datetime列进行排序,例如。
发布于 2013-04-13 20:58:32
所有上述解决方案都需要两个数据库调用。下面的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)
) https://stackoverflow.com/questions/1446821
复制相似问题