2015-01-01 46 views
0

我有一個數組從MySQL查詢有兩個部分,我想從第一部分獲得最大值,但是當我做max($row)它返回最大的一個日期,因爲這些值較高。當我嘗試max(array_column($row, 'SUM(DISTRIBUTED_AMOUNT/EXCHANGE_RATE)'));我得到這個錯誤max(): Array must contain at least one element有沒有辦法做到這一點只基於第一部分?最大從MySQL查詢數組的一部分

Array 
(
    [SUM(DISTRIBUTED_AMOUNT/EXCHANGE_RATE)] => 19.1630000055071 
    [DATE] => 2013-11 
) 
+0

這是一個多維數組,你想要SUM(DISTRIBUTED_AMOUNT/EXCHANGE_RATE)'具有最大值的子數組嗎? [這個答案可能是你之後的](http://stackoverflow.com/a/17339754/541091) –

+1

如果它是多維的,請爲上下文發佈更多的數組,並且澄清你的輸出應該是什麼 - 無論是整個子數組還是單個值都像'19.1630000055071'。如果你有PHP 5.5,可以很容易地用'max(array_column())來完成' –

+0

它是一個多維數組,array_column看起來像正確的東西,所以我試着這個'max(array_column($ row,'SUM(DISTRIBUTED_AMOUNT/EXCHANGE_RATE)'));'但是我得到這個錯誤'max():數組必須包含至少一個元素' –

回答

0

在跟蹤所需屬性的同時使用foreach。以日期爲例。保留一個變量MaxDate = FirstRow [Date]。然後迭代遍歷所有這些數據,並檢查實際行是否高於實際的MaxDate。這是一種蠻力的方式,但它肯定會奏效。你也可以使用SQL來實現最大值。

SELECT MAX(something) FROM 
     SELECT SUM(DISTRIBUTED_AMOUNT/EXCHANGE_RATE) AS something 
     FROM whatever; 

PHP蠻力:

$max = $result[0]['SUM(DISTRIBUTED_AMOUNT/EXCHANGE_RATE)']; 
foreach($result as $row){ 
    if($row['SUM(DISTRIBUTED_AMOUNT/EXCHANGE_RATE)'] > $max) 
     max = $row['SUM(DISTRIBUTED_AMOUNT/EXCHANGE_RATE)']; 
} 

echo $max; 

請注意,你必須使用在結果中的所有行。請記住檢查查詢結果中是否有元素。

+0

在同一表達式中不能有兩個聚合。你需要使用一個子查詢 - 內部查詢執行'SUM()AS',外部查詢執行'MAX(任何)'。 – Barmar

+0

你說得對。對不起。應該使用嵌套選擇。 –

+0

我需要用我現有的數組做這件事,因爲我正試圖將它從已經存在的查詢中刪除,而不做另一個查詢。 –