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

Lấy tổng số hàng khi dùng LIMIT trong MySQL

Để biết tổng số hàng thoả mãn điều kiện mà vẫn dùng LIMIT phân trang, sử dụng SQL_CALC_FOUND_ROWS kết hợp FOUND_ROWS().

Cú pháp

SELECT SQL_CALC_FOUND_ROWS * FROM ten_bang LIMIT offset, limit;
SELECT FOUND_ROWS();

Ví dụ minh họa

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

mysql> CREATE TABLE RowsUsingLimit (
    -> Id INT NOT NULL,
    -> Name VARCHAR(10)
    -> );

mysql> INSERT INTO RowsUsingLimit VALUES(10, 'Larry');
mysql> INSERT INTO RowsUsingLimit VALUES(9, 'Mike');
mysql> INSERT INTO RowsUsingLimit VALUES(15, 'Sam');
mysql> INSERT INTO RowsUsingLimit VALUES(20, 'Bob');
mysql> INSERT INTO RowsUsingLimit VALUES(1, 'Carol');
mysql> INSERT INTO RowsUsingLimit VALUES(18, 'David');

Truy vấn với LIMIT và tính tổng:

mysql> SELECT SQL_CALC_FOUND_ROWS * FROM RowsUsingLimit LIMIT 0, 6;
+----+-------+
| Id | Name  |
+----+-------+
| 10 | Larry |
|  9 | Mike  |
| 15 | Sam   |
| 20 | Bob   |
|  1 | Carol |
| 18 | David |
+----+-------+

mysql> SELECT FOUND_ROWS();
+--------------+
| FOUND_ROWS() |
+--------------+
| 6            |
+--------------+

Lưu ý quan trọng

  • SQL_CALC_FOUND_ROWS làm chậm truy vấn vì MySQL phải quét toàn bộ kết quả
  • Từ MySQL 8.0.17, SQL_CALC_FOUND_ROWS bị deprecated (khuyến cáo không dùng)
  • Thay thế: Chạy 2 truy vấn riêng - một COUNT(*) và một SELECT ... LIMIT
  • Hoặc dùng window function COUNT(*) OVER() (MySQL 8.0+)

Cách thay thế hiện đại (MySQL 8.0+)

SELECT *, COUNT(*) OVER() AS total_rows 
FROM ten_bang 
LIMIT offset, limit;