MySQL如何不按ID排序的结果中查找上一条和下一条记录?

本来的分页查询sql是:

select p.id,p.type_id,p.first_image,p.sort from product p where p.type_id = 1 order by p.sort asc , p.id asc limit 9;

查询出的结果:

img

我在百度上找的其他人写的sql语句,自己执行了一下,结果并不是我想要的。如:

-- 获取上一条
select b.* from 
(select @i:=@i+1 as rownum,id,title from product as p,(select @i:=0) as s
where p.type_id=1  order by p.sort,p.id) as a,
(select @j:=@j+1 as rownum,id,title from product as p,(select @j:=0) as s
where p.type_id = 1 order by p.sort,p.id) as b
where a.id = 174 and b.rownum < a.rownum order by b.rownum desc limit 1

这条sql查询出的结果为空,一条数据都没有,请教一下各位,应该如何修改呢?

你要按什么来排序咯

如果你的MySQL是8.x版本可以了解下lag这类窗口函数

下面是查询mysql的 content表中id=3的记录的前一条和后一条记录的sql
把条件中的3更换成其他的ID,可以查任意ID的的前一条和后一条记录

SELECT * FROM content WHERE id IN (SELECT CASE WHEN SIGN(id - 3) 0 THEN MIN(id) WHEN SIGN(id - 3) 0 THEN MAX(id) END AS id
FROM content WHERE id $amp;