2013-07-25 44 views
0

一直沒有找到任何關於這方面的信息,我可以自己做,但如果可能的話,我覺得在查詢中保留它可能是最好的選擇。頂級MySQL統計

基本上我想嘗試添加查詢的頂級「統計」部分。

所以,當我得到的結果,我會看到它像這樣

num_rows = 900 
distinct_col = 9 
results = array() 

這樣我可以循環的結果正常,然後拉出信息,我只需要一次,它的外面。這可能嗎?

編輯: 我不是正在尋找像num_rows正常的MySQL統計數據。但是,如果可以說你將結果限制爲10,那麼num_rows將返回10,但是你需要總計結果,所以900.在大多數情況下,我只是使用另一個查詢並只看數量,但是將它們合併爲一個邏輯上的查詢似乎對我來說更快。還有更多的是我可能需要的num_rows,比如說他們都是產品並且有一個特定的類別,我需要計算所有項目的類別數量。所以當這些列只有一個結果時循環原始結果是愚蠢的。

編輯2: 爲了進一步闡明我需要對某些列進行一些處理,並且可能會在連接上獲得最小最大結果。讓它在每一個循環中都能返回,但是當每次循環只需要一次循環時,看起來並不合邏輯,但是在每個循環中無用地返回相同的確切返回值。我不是MySQL專家,主要是試圖確保我拿出最合理和最快速的方法來獲取所需的數據。

這裏是一個PHP回報例如:

array(
    [num_rows] => 900, 
    [categories] => 9, 
    [min_price] => 400, 
    [max_price] => 900, 
    [results] => array(
    [0] => //row array 
    [1] -> //row array 
) 
); 

則MySQL返回其默認NUM行之前你「獲取」的結果,具有自定義添加的結果有可能是足夠的。

+0

每個人都可以循環的結果通常沒有這樣的統計數據。你確定你需要嗎? –

+0

我會更新這個問題,顯然它不夠清楚我在想什麼。 –

+0

這個問題目前還不清楚。您是否希望爲每個查詢提供這些數據,「以防萬一」或針對某些特定查詢? –

回答

1

說不上爲什麼你需要的,但是這是很容易得到

假設你正在使用safeMysql(雖然你可以使用任何方式將數據放入數組)

$results = $db->getAll("SELECT * FROM t"); 
$num_rows = count($results); 
$num_cols = count($results[0]); 

這一切

我主要是試圖確保我拿出最合理和最快速的方法來獲取所需的數據。

是的,你是。
使用每個循環獲取聚合數據沒有任何問題。

對於超出限額數 - 當你需要它,你可以使用MySQL的SQL_CALC_FOUND_ROWS/FOUND_ROWS()功能

+0

謝謝!這確實有幫助,所以你的說法即使它不「看起來」適當,它沒有任何錯誤嗎? –

+0

當然。這就是數據庫如何工作以及我們爲什麼使用它們。如果我們需要得到一些彙總統計數據,我們必須作爲數據庫來做所有的計算。如果每行都返回 - 實際上並不是什麼大問題。 –