2013-01-09 46 views
1

我有一個數組,他們中的每一個對數據庫不同的總和(也許他們中的一些是空的或者有沒有他們的記錄)如何計算其在陣列值對數據庫

更大的總和我需要知道哪一個具有更大的總和比所有其他(ON MY ARRAY),把一個在$大變量,($做大= $值)

我嘗試:

$new = 0; 
$myarray = array('2', '5', '17', '55'); 

foreach($myarray as $value) { 
    $before = intval($new); 

    $query = mysql_query("SELECT SUM(total) AS totals FROM table WHERE id='$value'"); 
    $result = mysql_fetch_assoc($query); 
    $new = intval($result['totals']); 

    if ($new > $before){ 
     $biggest=intval($value); 
    } 
} 

但它只顯示新的一個比ol更大的價值明鏡的,而不是更大的比他們都

任何幫助表示讚賞

+1

通過「比所有人更大」你是指所有特定的數組或數據庫的整個行嗎? – Roy

+1

我的意思是比所有特定數組都大,例如數組(5)應該大於2和17和55 – Vladimir

回答

4

我會完全消除的循環,做這樣的:

$myarray = array('2', '5', '17', '55'); 
$query = "SELECT SUM(total) AS totals FROM table WHERE id IN (" . implode(', ', $myarray) . ") GROUP BY id ORDER BY totals DESC LIMIT 1"; 
$result = mysql_query($query); 
$row = mysql_fetch_assoc($result); 

需要注意的是要接收所有數據ID的排序順序,你可以簡單地刪除LIMIT子句,並添加一個循環來讀出結果集的每一行。

我也建議不要使用mysql_*函數,因爲它們已被棄用。如果你只是學習PHP,你應該學習使用mysqli_*函數,PDO或將來會享受支持的東西。

您還應該瞭解如何測試數據庫查詢的失敗情況。我的例子很簡單,但生產代碼應該測試查詢和獲取操作的成功/失敗。

+0

我正在嘗試'MAX(SUM(total))',那不起作用。另一方面這完美地工作! :-) –

+0

謝謝邁克,如果我使用$ safe_array = mysql_real_escape_string($ array);在查詢之前使用mysql_query危險嗎?因爲PDO在服務器上被禁用,他們不會啓用它 – Vladimir

+1

哦,所以你實際上從某處傳入數據的數組?你應該絕對使用它來消毒。你不能將一個數組傳遞給'mysql_real_escape_string',你可能最好先在輸入數組上執行一個'$ safe_array = array_map('mysql_real_escape_string',$ array)''。 –