如何在PHP中对id求和

时间:2016-10-03 08:11:05

标签: php mysql

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>";    
}
?>

3 个答案:

答案 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)

PHP中的总和是可能的。

创建一个数组,其中$ ID作为数组ID,$ Value作为数组值,以及一个根据id更新值的函数。

$idSum = array();

function addSum ($idSum as array(), $id, $value){
  $idSum[$id] = $idSum[$id] + $value;
}

在foreach中调用addSum函数。