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

ORDER BY DESC và lấy 3 bản ghi đầu tiên trong MySQL với LIMIT


Giới thiệu

Kết hợp ORDER BY ... DESC với LIMIT để lấy top N bản ghi theo thứ tự giảm dần.

Cú pháp

SELECT * FROM table ORDER BY column DESC LIMIT n;

Hoặc có offset: LIMIT offset, n (bỏ qua offset dòng đầu).

Ví dụ minh họa

Tạo bảng và chèn dữ liệu

mysql> CREATE TABLE DemoTable (
    UserId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    UserName VARCHAR(100)
);
mysql> INSERT INTO DemoTable (UserName) VALUES 
('Chris'), ('Robert'), ('Bob'), ('David'), ('Mike');

Xem dữ liệu (UserId tăng dần)

mysql> SELECT * FROM DemoTable;
+--------+----------+
| UserId | UserName |
+--------+----------+
| 1      | Chris    |
| 2      | Robert   |
| 3      | Bob      |
| 4      | David    |
| 5      | Mike     |
+--------+----------+

Lấy 3 UserId lớn nhất (mới nhất)

mysql> SELECT * FROM DemoTable ORDER BY UserId DESC LIMIT 0, 3;

LIMIT 0, 3 = offset 0, lấy 3 dòng. Tương đương LIMIT 3.

Kết quả

+--------+----------+
| UserId | UserName |
+--------+----------+
| 5      | Mike     |
| 4      | David    |
| 3      | Bob      |
+--------+----------+

Lưu ý về LIMIT

  • LIMIT n: Lấy n dòng đầu (offset = 0).
  • LIMIT offset, n: Bỏ qua offset dòng, lấy n dòng tiếp theo.
  • LIMIT n OFFSET offset: Cú pháp chuẩn SQL (MySQL cũng hỗ trợ).
  • Phân trang: Trang 1: LIMIT 0, 10, Trang 2: LIMIT 10, 10...

Hiệu năng

  • Cần index trên cột ORDER BY để tránh filesort.
  • LIMIT với offset lớn (vd: LIMIT 1000000, 10) chậm vì phải scan qua offset dòng. Giải pháp: Seek pagination (WHERE id > last_seen_id).