想查询某个表当前数据以及上一条和下一条的记录,网上找了一下解决办法都不如意,按网上的方法可以查询出三条数据,但是当查询的这条数据没有上一条或下一条记录时就不行了。现在我把解决问题的sql语句放上 :
理一下思路,明确的查询三条语句:
SELECT * FROM 表名 WHERE id IN(当前id的前一个id值,id值,当前id的后一个id值)
在这里说一下为什么是“当前id的前一个id值”而不是“id值-1”,因为当前id的前一个id值不一定是比它小一个值,比如当前id值是6,那前一个id不一定是5,可能是4或者3。
现在说一下“当前id的前一个id值”sql怎么写,查询比当前id值小的所有记录,然后id按倒序排序取第一条,sql:
SELECT * FROM 表名 WHERE id IN(当前id的前一个id值,id值,当前id的后一个id值)
当前id的后一个id值,sql:
SELECT id FROM 表名 WHERE id>id值 ORDER BY id LIMIT 1
整体的sql:
SELECT * FROM 表名 WHERE id IN((SELECT id FROM 表名 WHERE id<id值 ORDER BY id DESC LIMIT 1),id值,(SELECT id FROM 表名 WHERE id>id值 ORDER BY id LIMIT 1))
如果查出的三条记录需要按id排序,可以在语句后面加是order by,sql:
SELECT * FROM 表名 WHERE id IN((SELECT id FROM 表名 WHERE id<id值 ORDER BY id DESC LIMIT 1),id值,(SELECT id FROM 表名 WHERE id>id值 ORDER BY id LIMIT 1)) ORDER BY id
例子:
SELECT * FROM ures WHERE id IN((SELECT id FROM ures WHERE id<4 ORDER BY id DESC LIMIT 1),4,(SELECT id FROM ures WHERE id>4 ORDER BY id LIMIT 1)) ORDER BY id