Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Tìm bản ghi trước và sau một ID cho trước bằng 1 truy vấn MySQL

Dùng UNION kết hợp 2 truy vấn: một lấy ID lớn hơn (next), một lấy ID nhỏ hơn (previous), mỗi cái LIMIT 1.

Cú pháp:

(SELECT * FROM yourTableName WHERE yourIdColumnName > yourValue ORDER BY yourIdColumnName ASC LIMIT 1)
UNION
(SELECT * FROM yourTableName WHERE yourIdColumnName < yourValue ORDER BY yourIdColumnName DESC LIMIT 1);

Tạo bảng:

mysql> CREATE TABLE previousAndNextRecordDemo (Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, Name VARCHAR(30));

Chèn 13 dòng (ID 1-13):

+----+---------+
| Id | Name    |
+----+---------+
| 1  | John    |
| 2  | Sam     |
| 3  | Carol   |
| 4  | Bob     |
| 5  | Larry   |
| 6  | David   |
| 7  | Ramit   |
| 8  | Maxwell |
| 9  | Mike    |
| 10 | Robert  |
| 11 | Chris   |
| 12 | James   |
| 13 | Jace    |
+----+---------+

Tìm bản ghi trước và sau ID = 8:

mysql> (SELECT * FROM previousAndNextRecordDemo WHERE Id > 8 ORDER BY Id ASC LIMIT 1)
    -> UNION
    -> (SELECT * FROM previousAndNextRecordDemo WHERE Id < 8 ORDER BY Id DESC LIMIT 1);

Kết quả:

+----+-------+
| Id | Name  |
+----+-------+
| 9  | Mike  |
| 7  | Ramit |
+----+-------+

ID 9 là next, ID 7 là previous.