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