簡體   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