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

Lấy dữ liệu giữa hai vị trí (phân trang offset) trong MySQL với LIMIT

Để lấy một đoạn (range) các hàng liên tiếp trong kết quả (ví dụ: hàng 3 đến 5), dùng LIMIT offset, row_count. offset là số hàng bỏ qua (0-based), row_count là số hàng lấy.

Tạo bảng 9 bản ghi

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

mysql> INSERT INTO DemoTable (Name) VALUES
('Larry'), ('Robert'), ('Chris'), ('David'), ('Bob'), ('Sam'), ('Mike'), ('Carol'), ('John');

Dữ liệu đầy đủ

mysql> SELECT * FROM DemoTable;
+----+--------+
| Id | Name   |
+----+--------+
|  1 | Larry  |
|  2 | Robert |
|  3 | Chris  |
|  4 | David  |
|  5 | Bob    |
|  6 | Sam    |
|  7 | Mike   |
|  8 | Carol  |
|  9 | John   |
+----+--------+

Lấy 3 hàng bắt đầu từ hàng thứ 3 (offset=2, limit=3)

mysql> SELECT * FROM DemoTable LIMIT 2, 3;

Kết quả (hàng 3, 4, 5)

+----+-------+
| Id | Name  |
+----+-------+
|  3 | Chris |
|  4 | David |
|  5 | Bob   |
+----+-------+

Giải thích

  • LIMIT 2, 3: Bỏ qua 2 hàng đầu (Id 1, 2), lấy 3 hàng tiếp theo (Id 3, 4, 5).
  • Tương đương chuẩn SQL: LIMIT 3 OFFSET 2.

Ứng dụng phân trang

  • Trang 1 (page_size=3): LIMIT 0, 3 hoặc LIMIT 3.
  • Trang 2: LIMIT 3, 3.
  • Trang N: LIMIT (N-1)*page_size, page_size.

Lưu ý

  • Luôn có ORDER BY để đảm bảo thứ tự ổn định.
  • Với offset rất lớn, dùng Keyset Pagination (WHERE id > last_id ORDER BY id LIMIT page_size) thay vì LIMIT offset, page_size.