2013-03-14 76 views
0

我有一個場景。我的表格中有300條記錄。我執行一個查詢來獲得總數。然後,因爲我必須實現分頁,所以我使用根據計數的限制從同一個表中選擇數據。我在想如果我能在單個查詢中獲得計數和數據。 。在sql查詢中節省時間

我嘗試下面的代碼:

Select * ,count(*) as cnt from table;

但是,這給我的總數卻只有1個紀錄!

有沒有一種方法可以節省我在查詢中耗盡的時間,並在單個查詢中獲得結果?

+0

如果您正在進行分頁,使用應用程序代碼(php,.net,coldfusion等)可能會使整個過程更加簡單。 – 2013-03-14 14:05:01

+0

@DanBracuk - 應用程序代碼無法在「LIMIT」數據集上獲得全表計數。 – 2013-03-14 14:40:24

回答

4

類似:

select t1.*,t2.cnt 
from table t1 
cross join (select count(*) as cnt from table) t2 
limit 'your limit for the first page' 

select *,(select count(*) from table) as cnt 
from table 
limit 'your limit for the first page' 
+0

可以請你解釋第一次回答一次。我沒有那麼多的知識 – PSR 2013-03-14 13:55:59

+0

我加入了它的計數表(一行一列的表)。我顯示來自第二個表的所有內容和計數。 – 2013-03-14 13:58:13

+0

但是使用這個我將不得不每次都執行計數查詢。不是嗎? – 2013-03-15 05:32:57

0

使用兩個查詢可能不會像你想象的那樣糟糕,你可以更多的信息,請閱讀this

+0

'SQL_CALC_FOUND_ROWS'實際上比運行單獨的COUNT()查詢要慢。 – 2013-03-14 14:00:41

+0

這取決於索引,我會更新原始帖子。 – tonyjmnz 2013-03-14 14:13:14

0

你可以從你提到的數據結構中獲得信息,但是確實沒有理由這樣做。當您執行兩個查詢時沒有性能問題 - 一個用於獲取行數,另一個用於數據選擇。當您嘗試選擇一個查詢中的所有信息時,您不保存任何內容。做兩個簡單的查詢,它會是更好的解決方案 - 你會保持簡單和清晰。