id leavetype leavecount
=======================
1 Medical 2
1 Annual 3
1 Casual 2
1 Lwop 1
我想与id
相加leavecount
总和为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>";
}
?>
答案 0 :(得分:0)
$dbh->query("SELECT COUNT(*) as cnt
FROM ams
where empid= $empid
GROUP BY empid");
$dbh->execute();
$row = $dbh->fetchAll();
然后 $row
将包含计数。
(将变量直接放入查询中是非常不好的做法,您可以通过将:empid
放入查询中来插入它们,然后在执行中添加一个关联数组:empid => $empid
)
(关于leavecount
,您是否要选择没有离开计数的计数?如果是,您要使用WHERE
而不是HAVING
)
答案 1 :(得分:0)
不需要HAVING leavecount = ''
它强制您的查询将具有leavecount的结果集过滤为空字符串''
。
此外,如果您已经empid
按员工ID过滤结果,则无需GROUP BY
结果。仅当您希望将结果分组,其中三个可能有多个员工ID时,才使用GROUP BY
。
您还需要将count()
函数替换为sum()
以对leaves
列的值求和,您现在正在做的是计算行而不是需要求和叶子栏的值。
因此当您empid
时,您的查询将会是这样的。
SELECT SUM(leavecount) as cnt
FROM ams
where empid = $empid
如果您想获得所有员工的叶子数, GROUP BY 由empid
设置结果。
SELECT empid,SUM(leavecount) as cnt
FROM ams
GROUP BY empid
答案 2 :(得分:0)
创建一个数组,其中$ ID作为数组ID,$ Value作为数组值,以及一个根据id更新值的函数。
$idSum = array();
function addSum ($idSum as array(), $id, $value){
$idSum[$id] = $idSum[$id] + $value;
}
在foreach中调用addSum函数。