2012-10-18 96 views
1

我正在嘗試編寫一個mysql查詢,以便我可以搜索表的前10行並在同一查詢中獲取總行數。從同一個查詢中獲取總行數和表中的前10行

即結合

SELECT * FROM myTable LIMIT 10; // Get First 10 Rows 

SELECT COUNT(*) as cnt FROM myTable // Total Row Count 
在同一查詢

由於我使用PHP,技術上我可以執行:

SELECT * FROM myTable 

然後使用count()來獲取總行數和array_slice獲得第10個數組元素。

但這聽起來不太有效。

回答

2
SELECT SQL_CALC_FOUND_ROWS * FROM myTable LIMIT 10; 

SELECT FOUND_ROWS(); 

它不完全在一個查詢,但第二個查詢始終是相同的,它不會再次執行完整的以前的查詢,這是很好的,如果它是一個複雜的查詢。

這是第一個查詢中的SQL_CALC_FOUND_ROWS子句,它導致計算記錄的總數,就好像未添加限制一樣。

+0

SELECT FOUND_ROWS()將retrive上一個查詢的總行數,如果一個SELECT Blahblah限制後執行10將始終高於10 – Josejulio

+0

較小或等於沒有它贏得」 t中,select中的'SQL_CALC_FOUND_ROWS'會導致計算行的總數,就好像'LIMIT'不存在一樣。閱讀文檔,這是一個很棒的功能,特別是對於分頁等。 – GolezTrol

+0

噢,我的錯誤,對不起,沒有看到SQL_CALC_FOUND_ROWS。 – Josejulio

1
SELECT COUNT(*),* as cnt FROM myTable group by (anyROW) limit 10 
1

SELECT myTable.*, count(*) as count from myTable LIMIT 10;

1

這應該這樣做:

SELECT (SELECT count(*) FROM TheTable) as ct, TheTable.* FROM TheTable limit 10; 
+0

這將在這個簡單的例子中起作用,但在實踐中,您通常會選擇使用更多條件,在這種情況下,您必須重複查詢才能獲得總數。即使這個簡單的查詢已經相當複雜了。 – GolezTrol

相關問題