2010-02-16 110 views
3

說我的MySQL DB中的users表包含大量的條目。SQL:使用LIMIT查詢時計算匹配結果的數量

我需要經過所有的用戶,但我想這樣做只是塊在同一時間(即使用LIMITOFFSET):

SELECT * FROM users LIMIT 100 OFFSET 200

是否有可能知道的總數在查詢中匹配的用戶,但只返回它們的LIMIT數量?

換句話說,是否有可能提前知道用戶的總數,而不進行單獨的查詢?

回答

4

可以在(幾乎)一個查詢做到這一點,利用SQL_CALC_FOUND_ROWS and FOUND_ROWS()

SELECT SQL_CALC_FOUND_ROWS * FROM users LIMIT 100 OFFSET 200; 
SELECT FOUND_ROWS(); 

雖然你仍然出現了兩個結果集,實際的查詢只執行一次,這樣可以節省你的重複編碼和可能會浪費CPU週期。

0

不幸的是沒有。您需要執行兩個查詢:一個用於獲取用戶總數,另一個用於獲取單個用戶頁面。

select count(*) from users; 
select * from users limit 0,10; 
0

在SQL標準中是不可能的。我不知道mysql很多,但我會認爲即使在任何SQL擴展中也是不可能的。