Để 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, 3hoặcLIMIT 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.