1. 程式人生 > >SQL查詢當前資料以及上一條和下一條三條記錄

SQL查詢當前資料以及上一條和下一條三條記錄

想查詢某個表當前資料以及上一條和下一條的記錄,網上找了一下解決辦法都不如意,按網上的方法可以查詢出三條資料,但是當查詢的這條資料沒有上一條或下一條記錄時就不行了。現在我把解決問題的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