[英]How to sum against id in PHP
id leavetype leavecount
=======================
1 Medical 2
1 Annual 3
1 Casual 2
1 Lwop 1
我想对id
求和,就像leavecount
sum 是 8 对id
:
id grand total
================
1 8
我正在使用此代码:
foreach($dbh->query("SELECT COUNT(*) as cnt
FROM ams
where empid= $empid
GROUP BY empid
HAVING leavecount = ''") as $grandtotal)
{
echo "<table ><tr ><td style='border: 0px; ' >" . $grandtotal['cnt'] . "</td></tr></table>";
}
?>
$dbh->query("SELECT COUNT(*) as cnt
FROM ams
where empid= $empid
GROUP BY empid");
$dbh->execute();
$row = $dbh->fetchAll();
$row
然后将包含计数。
(将变量直接放入查询中是非常糟糕的做法,您可以通过将:empid
放入查询中来插入它们,然后使用:empid => $empid
在执行中添加一个关联数组)
(关于leavecount
,您是否要选择没有 leavecount 的计数?如果是这样,您想使用WHERE
not HAVING
)
不需要HAVING leavecount = ''
它会强制您的查询过滤掉具有 leavecount 为空白字符串''
的结果集。
此外,如果您已经有empid
按员工 ID 过滤结果,则无需对结果进行GROUP BY
。 仅当您希望对结果进行分组时,才使用GROUP BY
,其中三个员工 ID 可能超过一个。
您还需要将count()
函数替换为sum()
来对leaves
列的值求和,您现在正在做的是对行进行计数,而不是您需要对叶子列的值求和。
所以当你有empid
时,你的查询看起来像这样。
SELECT SUM(leavecount) as cnt
FROM ams
where empid = $empid
如果您想获取所有员工的叶子数,请按empid
对结果集进行GROUP BY 。
SELECT empid,SUM(leavecount) as cnt
FROM ams
GROUP BY empid
PHP 中的 sum 是可能的。
创建一个 $ID 作为数组 id 和 $Value 作为数组值的数组和一个基于 id 更新值的函数。
$idSum = array();
function addSum ($idSum as array(), $id, $value){
$idSum[$id] = $idSum[$id] + $value;
}
在 foreach 中调用 addSum 函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.