由于在项目中需要根据ID获取本条数据的上一条和下一条的问题。
为此,我首先为表t 创建了一个字段sort用来控制排序,于是我就这么取上一条:
select t.* from t where t.sort=(select min(t2.sort) from t t2 where t2.sort>(select t2.sort from t t3 where t3.id='ID')) limit 1
但是在测试的时候发现,当sort有重复的值时,其中一条会在一直点上一条或下一条的时候会跳过,为防止这一问题于是改为这么取上一条:
select t.* from t t1,t t2 where (t1.sort<t2.sort or (t1.sort=t2.sort and t1.id<t2.id)) and t2.id="ID" ORDER BY t1.sort DESC,t1.id DESC LIMIT 1