繁体   English   中英

如何在 PHP 中对 id 求和

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM