Php 从使用union的sql语句中添加总计
我有一个查询,它使用union显示每个请求类别的总数。我试图找到一种方法来添加所有6个类别的总数,并在用户页面上显示它们。我正在使用ajax来重新加载总数,因为他们进来或完成。我得到的回应显示了每个类别的连续性,而不是总数Php 从使用union的sql语句中添加总计,php,mysql,sql,count,union,Php,Mysql,Sql,Count,Union,我有一个查询,它使用union显示每个请求类别的总数。我试图找到一种方法来添加所有6个类别的总数,并在用户页面上显示它们。我正在使用ajax来重新加载总数,因为他们进来或完成。我得到的回应显示了每个类别的连续性,而不是总数 $sql = "SELECT 'SKU Requests: ' AS skus, COUNT(*), '/admin/sku2', '/skuRequest/myRequests.php' AS sLink FROM sku_request WHERE comple
$sql = "SELECT 'SKU Requests: ' AS skus, COUNT(*), '/admin/sku2', '/skuRequest/myRequests.php' AS sLink FROM sku_request WHERE completed = 0
UNION
SELECT 'Sku Update:' AS updates, COUNT(*), '/admin/sku/skuUpdate.php', '#' AS sLink FROM sku_update WHERE completed = 0
UNION
SELECT 'RMA Requests: ' AS rma, COUNT(*),'/admin/rma', '/rma/yourRequests.php' AS sLink FROM rma_submissions WHERE rma_number = 'Pending'
UNION
SELECT 'Termination Requests: ' AS idT, COUNT(*),'/admin/idTerminations','/idTermination/yourIdTermRequests.php' AS sLink FROM idTermination WHERE completed = 0
UNION
SELECT 'ID Requests: ' AS ids, COUNT(*), '/admin/idRequest2', '/idRequest/yourIdRequests.php' AS sLink FROM id_request WHERE ssoid IS NULL
UNION
SELECT 'TDA: ' AS tda, COUNT(*), '/admin/tda', '/tda' AS sLink FROM tda_request WHERE completed = 0
";
$stmt = $conn->prepare($sql);
$stmt->bindColumn(1,$ID);
$stmt->bindColumn(2,$count);
$stmt->bindColumn(3,$link);
$stmt->bindColumn(4,$link2);
$stmt->execute();
$numRows = $stmt->rowCount();
if (isset($numRows)) {
}
while ($stmt->fetch()) {
$reqTotals+= $count;
echo $reqTotals;
}
当为空时,回显的结果为000000。如果一个请求进入,比如说ID终止,它会显示000110,而它应该只显示1。TDA请求显示000001
我怎样才能把这些加起来?我试过使用+=但似乎不起作用。奇怪的是,如果我把结果放在一个会话中,它工作得很好
这可以工作并显示正确的数字。但我不喜欢在会议中使用这个
while ($stmt->fetch()) {
if($count > 0){
$class = "badge badge-pill badge-danger";
}else{$class = "badge badge-pill badge-success";}
if($_SESSION['role'] == 'Admin'){
echo '<div class="btn-group floatRight" role="group" style="font-size: 14px;"><a href="'.$link.'" class="nav-link" style="margin-left: -20px;"> '.$ID.' <span class="'.$class.'" style="margin-left: 4px; margin-right: -6px;"> ' . $count . '</span></a></div>';
if ($count == 0) {
$_SESSION['re_totals']+= 0;
}
$_SESSION['re_totals']+= $count;
}else{
echo '<div class="btn-group floatRight" role="group"><a href="'.$link2.'" class="nav-link" style="margin-left: -20px;"> '.$ID.' <span class="'.$class.'" style="margin-left: 4px;"> ' . $count . '</span></a></div>';
if ($count == 0) {
$_SESSION['re_totals']+= 0;
}
$_SESSION['re_totals']+= $count;
}
}
我得到的回应显示了每个类别的连续性,而不是总数
$sql = "SELECT 'SKU Requests: ' AS skus, COUNT(*), '/admin/sku2', '/skuRequest/myRequests.php' AS sLink FROM sku_request WHERE completed = 0
UNION
SELECT 'Sku Update:' AS updates, COUNT(*), '/admin/sku/skuUpdate.php', '#' AS sLink FROM sku_update WHERE completed = 0
UNION
SELECT 'RMA Requests: ' AS rma, COUNT(*),'/admin/rma', '/rma/yourRequests.php' AS sLink FROM rma_submissions WHERE rma_number = 'Pending'
UNION
SELECT 'Termination Requests: ' AS idT, COUNT(*),'/admin/idTerminations','/idTermination/yourIdTermRequests.php' AS sLink FROM idTermination WHERE completed = 0
UNION
SELECT 'ID Requests: ' AS ids, COUNT(*), '/admin/idRequest2', '/idRequest/yourIdRequests.php' AS sLink FROM id_request WHERE ssoid IS NULL
UNION
SELECT 'TDA: ' AS tda, COUNT(*), '/admin/tda', '/tda' AS sLink FROM tda_request WHERE completed = 0
";
$stmt = $conn->prepare($sql);
$stmt->bindColumn(1,$ID);
$stmt->bindColumn(2,$count);
$stmt->bindColumn(3,$link);
$stmt->bindColumn(4,$link2);
$stmt->execute();
$numRows = $stmt->rowCount();
if (isset($numRows)) {
}
while ($stmt->fetch()) {
$reqTotals+= $count;
echo $reqTotals;
}
为什么不直接在数据库中进行计算呢
选择
从sku_请求中选择COUNT*作为cnt,其中completed=0
+从sku\U更新中选择计数*,其中已完成=0
+从rma\U提交中选择COUNT*,其中rma\U编号=‘待定’
+从idTermination中选择COUNT*,其中completed=0
+从ssoid为NULL的id_请求中选择COUNT*
+从tda_请求中选择计数*,其中已完成=0
作为res
echo$reqTotals应该在循环之外,这就是为什么您有60。var_dump$count返回什么?@user3783243是的,我想到了,但返回0。我将where从0=>1更改为显示结果我以前从未使用过bindColumn。如果您将其注释出来并使用while$row=$stmt->fetch{print\r$row;您有什么?行计数也可能不会做您想要的事情,但如果设置为$numRows{不做任何事情,则无所谓。