Computer >> Máy Tính >  >> Lập trình >> MySQL

Làm cách nào để tìm bản ghi trước đó và bản ghi tiếp theo bằng cách sử dụng một truy vấn duy nhất trong MySQL?

Bạn có thể sử dụng UNION để lấy bản ghi trước đó và tiếp theo trong MySQL.

Cú pháp như sau

 (select * from yourTableName WHERE yourIdColumnName> yourValue ORDER BYyourIdColumnName ASC LIMIT 1) UNION (chọn * từ yourTableName WHERE yourIdColumnName 
 Để hiểu khái niệm này, chúng ta hãy tạo một bảng. Truy vấn để tạo bảng như sau 

 mysql> tạo bảng trướcAndNextRecordDemo -> (-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> Tên varchar (30) ->); Truy vấn OK, 0 hàng bị ảnh hưởng (1,04 giây) 

Chèn một số bản ghi vào bảng bằng lệnh chèn.

Truy vấn như sau

 mysql> chèn vào giá trị trướcAndNextRecordDemo (Tên) ('John'); Truy vấn OK, 1 hàng bị ảnh hưởng (0,17 giây) mysql> chèn vào giá trị trướcAndNextRecordDemo (Tên) ('Sam'); Truy vấn OK, 1 hàng bị ảnh hưởng ( 0,15 giây) mysql> chèn vào giá trị trướcAndNextRecordDemo (Tên) ('Carol'); Truy vấn OK, 1 hàng bị ảnh hưởng (0,14 giây) mysql> chèn vào giá trị trướcAndNextRecordDemo (Tên) ('Bob'); Truy vấn OK, 1 hàng bị ảnh hưởng ( 0,17 giây) mysql> chèn vào giá trị trướcAndNextRecordDemo (Tên) ('Larry'); Truy vấn OK, 1 hàng bị ảnh hưởng (0,20 giây) mysql> chèn vào giá trị trướcAndNextRecordDemo (Tên) ('David'); Truy vấn OK, 1 hàng bị ảnh hưởng ( 0,14 giây) mysql> chèn vào giá trị trướcAndNextRecordDemo (Tên) ('Ramit'); Truy vấn OK, 1 hàng bị ảnh hưởng (0,12 giây) mysql> chèn vào giá trị trướcAndNextRecordDemo (Tên) ('Maxwell'); Truy vấn OK, 1 hàng bị ảnh hưởng ( 0,15 giây) mysql> chèn vào giá trị trướcAndNextRecordDemo (Tên) ('Mike'); Truy vấn OK, 1 hàng bị ảnh hưởng (0,14 giây) mysql> chèn vào giá trị trướcAndNextRecordDemo (Tên) ('Robert'); Truy vấn OK, 1 r cú ảnh hưởng (0,19 giây) mysql> chèn vào giá trị trướcAndNextRecordDemo (Tên) ('Chris'); Truy vấn OK, 1 hàng bị ảnh hưởng (0,10 giây) mysql> chèn vào giá trị trướcAndNextRecordDemo (Tên) ('James'); Truy vấn OK, 1 hàng bị ảnh hưởng (0,16 giây) mysql> chèn vào giá trị trướcAndNextRecordDemo (Tên) ('Jace'); Truy vấn OK, 1 hàng bị ảnh hưởng (0,15 giây) 

Hiển thị tất cả các bản ghi từ bảng bằng cách sử dụng câu lệnh select.

Truy vấn như sau

 mysql> select * from beforeAndNextRecordDemo; 

Sau đây là kết quả

 + ---- + --------- + | Id | Tên | + ---- + --------- + | 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 | + ---- + --------- + 13 hàng trong bộ (0,00 giây) 

Đây là truy vấn để lấy bản ghi trước đó và tiếp theo bằng cách sử dụng một truy vấn duy nhất với UNION

 mysql> (select * from beforeAndNextRecordDemo WHERE Id> 8 ORDER BY Id ASC LIMIT 1) -> UNION -> (select * from beforeAndNextRecordDemo WHERE Id <8 ORDER BY Id DESC LIMIT 1); 

Sau đây là kết quả

 + ---- + ------- + | Id | Tên | + ---- + ------- + | 9 | Mike || 7 | Ramit | + ---- + ------- + 2 hàng trong bộ (0,03 giây)