我在表格上有一些数据行,如下所示:
+-------------------+-------+
| 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,因为它被假设显示?
答案 0 :(得分: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