May mắn thay kể từ MySQL 4.0.0, bạn có thể sử dụng SQL_CALC_FOUND_ROWS
trong truy vấn của bạn, tùy chọn này sẽ yêu cầu MySQL đếm tổng số hàng bỏ qua LIMIT
mệnh đề. Bạn vẫn cần thực hiện một truy vấn thứ hai để truy xuất số lượng hàng, nhưng đó là một truy vấn đơn giản và không phức tạp như truy vấn truy xuất dữ liệu của bạn. Cách sử dụng khá đơn giản. Trong truy vấn chính của bạn, bạn cần thêm SQL_CALC_FOUND_ROWS
chỉ sau SELECT
và trong truy vấn thứ hai, bạn cần sử dụng FOUND_ROWS()
hàm để lấy tổng số hàng. Các truy vấn sẽ giống như sau:
SELECT SQL_CALC_FOUND_ROWS name, email FROM users WHERE name LIKE 'a%' LIMIT 10;
SELECT FOUND_ROWS();
Hạn chế duy nhất là bạn phải gọi truy vấn thứ hai ngay sau truy vấn đầu tiên vì SQL_CALC_FOUND_ROWS
không lưu số hàng ở bất kỳ đâu. Mặc dù giải pháp này cũng yêu cầu hai truy vấn nhưng nhanh hơn nhiều vì bạn chỉ thực hiện truy vấn chính một lần. Bạn có thể đọc thêm về SQL_CALC_FOUND_ROWS và FOUND_ROWS ()
trong tài liệu MySQL.
CHỈNH SỬA: Bạn nên lưu ý rằng trong hầu hết các trường hợp, việc chạy truy vấn hai lần thực sự nhanh hơn SQL_CALC_FOUND_ROWS
. xem tại đây
CHỈNH SỬA 2019:
Công cụ sửa đổi truy vấn SQL_CALC_FOUND_ROWS và hàm FOUND_ROWS () đi kèm không được dùng nữa kể từ MySQL 8.0.17 và sẽ bị xóa trong phiên bản MySQL trong tương lai.
https://dev.mysql.com /doc/refman/8.0/en/information-functions.html# Chức năng_found-rows
Bạn nên sử dụng COUNT
thay vào đó
SELECT * FROM tbl_name WHERE id > 100 LIMIT 10;
SELECT COUNT(*) WHERE id > 100;