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

Phân trang (Pagination) trong MySQL với LIMIT, OFFSET

Sử dụng LIMIT offset, count hoặc LIMIT count OFFSET offset để phân trang.

Chuẩn bị dữ liệu (11 hàng)

mysql> CREATE TABLE limitoffsetDemo (id INT, FirstName VARCHAR(200));
mysql> INSERT INTO limitoffsetDemo VALUES
(1,'John'),(2,'Bob'),(3,'David'),(4,'carol'),(5,'Taylor'),
(1,'John'),(7,'Smith'),(8,'John'),(9,'Johnson'),(10,'Jason'),(11,'Bk');

Tất cả dữ liệu:

mysql> SELECT * FROM limitoffsetDemo;
+------+-----------+
| id   | FirstName |
+------+-----------+
| 1    | John      |
| 2    | Bob       |
| 3    | David     |
| 4    | carol     |
| 5    | Taylor    |
| 1    | John      |
| 7    | Smith     |
| 8    | John      |
| 9    | Johnson   |
| 10   | Jason     |
| 11   | Bk        |
+------+-----------+

Phân trang: Lấy 4 bản ghi bắt đầu từ vị trí 7 (0-based)

mysql> SELECT * FROM limitoffsetDemo LIMIT 7, 4;
+------+-----------+
| id   | FirstName |
+------+-----------+
| 8    | John      |
| 9    | Johnson   |
| 10   | Jason     |
| 11   | Bk        |
+------+-----------+

Giải thích

  • LIMIT 7, 4: Bỏ qua 7 hàng đầu (OFFSET 7), lấy 4 hàng tiếp theo.
  • Tương đương: LIMIT 4 OFFSET 7.
  • Trang 1 (kích thước 4): LIMIT 0, 4 hoặc LIMIT 4.
  • Trang 2: LIMIT 4, 4.
  • Trang N: LIMIT (N-1)*page_size, page_size.

Lưu ý hiệu năng: OFFSET lớn sẽ chậm vì MySQL phải đọc và bỏ qua nhiều hàng. Với dữ liệu lớn, hãy dùng "keyset pagination" (WHERE id > last_seen_id ORDER BY id LIMIT page_size).