2015-07-13 49 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