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

Truy vấn MySQL lấy số dòng của truy vấn trước bằng FOUND_ROWS()

Để biết tổng số hàng khớp điều kiện của truy vấn trước đó (trước khi áp dụng LIMIT), MySQL cung cấp hàm FOUND_ROWS() kết hợp với SQL_CALC_FOUND_ROWS.

Ví dụ minh họa

Sử dụng database information_schema để demo với các bảng có tên bắt đầu bằng "DemoTable29":

Truy vấn có SQL_CALC_FOUND_ROWS và LIMIT 4:

mysql> SELECT SQL_CALC_FOUND_ROWS TABLE_NAME 
FROM `information_schema`.tables 
WHERE TABLE_NAME LIKE "DemoTable29%" LIMIT 4;

Kết quả (chỉ 4 hàng do LIMIT):

+--------------+
| TABLE_NAME   |
+--------------+
| demotable29  |
| demotable290 |
| demotable291 |
| demotable292 |
+--------------+

Truy vấn lấy tổng số hàng thực tế

mysql> select found_rows();

Kết quả:

+--------------+
| found_rows() |
+--------------+
| 10           |
+--------------+

Giải thích:

  • SQL_CALC_FOUND_ROWS: Yêu cầu MySQL tính tổng số hàng khớp điều kiện (bỏ qua LIMIT)
  • LIMIT 4: Chỉ trả về 4 hàng đầu tiên
  • FOUND_ROWS(): Trả về tổng số hàng thực tế (10) của truy vấn trước

Ứng dụng: Phân trang (pagination) - hiển thị trang 1/10 nhưng vẫn biết tổng số trang để vẽ điều hướng phân trang. Lưu ý: Từ MySQL 8.0.17, SQL_CALC_FOUND_ROWS bị deprecated, khuyến nghị dùng COUNT(*) riêng biệt cho hiệu suất tốt hơn.