2015-07-13 53 views
0

我有一個表中的數據的一些行的最後一個元素:雖然不指望一個數組

+-------------------+-------+ 
| criteria   | value | 
+-------------------+-------+ 
| Pengalaman Kerja |  4 | 
| Pendidikan  |  3 | 
| Usia    |  5 | 
| Status Perkawinan |  2 | 
| Alamat   |  6 | 
| Pengalaman Kerja |  3 | 
| Pendidikan  |  1 | 
| Usia    |  4 | 
| Status Perkawinan |  2 | 
| Alamat   |  1 | 
+-------------------+-------+ 
10 rows in set (0.00 sec) 

我試着用fetch_object()獲取他們都在PHP,然後轉換返回數據轉換爲數組並對錶中列出的每個條件的值進行求和。 例如:Pengalaman kerja具有兩個值(4和3),以便對於Pengalaman Kerja陣列結果將是7.

$result  = $db->query($sql); 
$value  = array(); 

while($row=$result->fetch_object()){ 

if(!isset($value[$row->criteria]){ 
    $value[$row->criteria] = 0; 
}) 

    $value[$row->criteria] += $row->value; 

    var_dump($value); 
} 

當我跑var_dump$value(其現在包含的每個標準求和值)它顯示我:

array(5) { 
    ["Pengalaman Kerja"]=> 
    int(7) 
    ["Pendidikan"]=> 
    int(4) 
    ["Usia"]=> 
    int(9) 
    ["Status Perkawinan"]=> 
    int(4) 
    ["Alamat"]=> 
    int(6) 
} 

Pengalaman kerja是正確的,因爲4 + 3 = 7 Pendidikan是正確的,因爲3 + 1 = 4 Usia是正確的,因爲5 + 4 = 9 Status Perkawinan是正確的,因爲2 + 2 = 4 而錯的是Alamat顯示6,它應該是7,因爲6 + 1 = 7

我敢肯定,這是因爲Alamat記錄之一是在最後的行並且while()函數直到最後一行都沒有計數。 While()功能只計算到最後 - 1

我該如何解決這個問題,因此Alamat顯示7,因爲它是suppossed顯示?

回答

1

爲什麼在PHP中這樣做呢?如果你只是想要所有行的總和由criteria分組,然後用一個簡單的MySQL查詢做到這一點?

SELECT criteria, SUM(value) AS total FROM table GROUP BY criteria 

編輯:如果你堅持從代碼中的幾個錯別字,這通常會導致運行錯誤做它自己的方式,然後放在一邊,按照預期的代碼應工作。當我用完全相同的數據在一張桌子上運行它時,我會得到預期的結果。

BTW,PDOStatement沒有調用的方法fetch_object(這是輔助函數的名稱),所以如果你想用一個方法來獲取查詢結果作爲對象的PDOStatement對象,你必須使用正確的名稱是fetchObject()

PHP

$result = $dbh->query("SELECT * FROM test"); 
$value = array(); 

while ($row = $result->fetchObject()) { 
    if (!isset($value[$row->criteria])) { 
     $value[$row->criteria] = 0; 
    } 
    $value[$row->criteria] += $row->value; 
} 
var_dump($value); 

結果

array (size=5) 
    'Pengalaman Kerja' => int 7 
    'Pendidikan' => int 4 
    'Usia' => int 9 
    'Status Perkawinan' => int 4 
    'Alamat' => int 7 
+0

其實,我使用SQL查詢也問這個問題之前做了什麼。只是尋找新的方法:) – januaryananda

+0

更新我的答案,包括進一步的信息。 – brezanac

+0

你能指點我在我的代碼中出了什麼問題嗎?你上面寫的代碼看起來和我的相似。沒有區別 – januaryananda