Làm thế nào để QUÁ số lượng hàng với GIỚI HẠN?


9

Tôi muốn bắt X hàng, do đó, tôi đặt LIMIT X; nhưng làm thế nào tôi có thể đồng thời đếm tổng số hàng?

Hiện tại, tôi sử dụng hai truy vấn riêng biệt để làm như vậy

SELECT COUNT(*) FROM col WHERE CLAUSE
SELECT * FROM col WHERE CLAUSE LIMIT X

Có cách nào để làm điều này trong một truy vấn không?

EDIT: Đầu ra phải là các colô và số lượng hàng. Trong thực tế, sau khi chọn các colô, nó chỉ nên đi qua bảng để đếm.

Tôi biết rằng không thể hợp nhất hai truy vấn này, vì hàng đầu tiên trả về 1 hàng, nhưng hàng X thứ hai. Tôi tò mò nếu có một hàm trong mysql để trả về số lượng hàng có mặt LIMIT.


Bạn có thể hiển thị một hoặc hai dòng đầu ra mong muốn của bạn?
dezso

1
Hai truy vấn không tương thích, vì chúng hiện được viết: Một truy vấn trả về một bản ghi với một cột duy nhất, cột kia sẽ trả về nhiều cột trong các hàng X. Vui lòng hiển thị một ví dụ về đầu ra mong muốn nếu bạn muốn chúng tôi đưa ra câu trả lời có ý nghĩa.
Thất vọngWithFormsDesigner

Câu trả lời:


5

Nghe có vẻ như bạn muốn chạy GIỚI HẠN, nhưng vẫn biết có bao nhiêu hàng sẽ được trả lại nếu không có GIỚI HẠN. Kiểm tra ROWS FOUND


1
+ 1 cái này cho FOUND ROWSvà trong khi nó vẫn đang thực hiện hai truy vấn, nó có thể có hiệu suất tốt hơn so với chạy truy vấn COUNT (*) thứ hai (tùy thuộc vào truy vấn và dữ liệu).
Derek Downey

Đây là chính xác những gì tôi có ý nghĩa. Tôi biết rằng mysqlsẽ không để chúng tôi một mình trong một vấn đề quan trọng như vậy;)
Googlebot

1
Vui vì điều đó sẽ giúp. Đừng lo lắng, mysql vẫn sẽ làm phiền bạn về một số vấn đề quan trọng.
Alain Collins

@DTest: hoặc (có thể) hiệu suất kém hơn so với chạy truy vấn COUNT (*) thứ hai.
ypercubeᵀᴹ

@ypercube chính xác
Derek Downey

3

Sử dụng SQL_CALC_FOUND_ROWStrong truy vấn CHỌN của bạn và sau đó chạy SELECT FOUND_ROWS():

SELECT SQL_CALC_FOUND_ROWS field_name,filed_name2 FROM col WHERE CLAUSE LIMIT X;
SELECT FOUND_ROWS() ;

1
Điều này sẽ được hưởng lợi từ một số dọn dẹp và một vài chi tiết để nó hữu ích hơn.
RLF

2

Tôi biết đây là một cái cũ nhưng nó không còn hợp lệ nữa, với MySQL> = 8.0.17 cf Hàm MySQL Found_Rows () Vì vậy, chúng tôi vẫn phải đưa ra cả hai truy vấn tức là. Thêm một với COUNT(), không may.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.