【问题标题】:Adding totals from sql statements that use union从使用联合的 sql 语句中添加总计
【发布时间】:2020-12-21 21:50:44
【问题描述】:

我有一个查询,它使用联合来显示每个请求类别的总数。我正在尝试找到一种方法来添加所有 6 个类别的总数并将它们显示在用户页面上。我正在使用 ajax 在总数进入或完成时重新加载它们。我收到的回复是连续显示每个类别而不是总数。

$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;
}


}
Current result:
     Request Totals: 000000
Desired Results:
     Request Totals: 0 or 1, 2, 3 etc.

【问题讨论】:

  • echo $reqTotals 应该在循环之外,这就是为什么你有 6 个0s。 var_dump($count) 回馈什么?
  • @user3783243 是的,我想到了,但返回 0。我将 where 从 0 => 1 更改为显示结果
  • 我之前没用过bindColumn。如果您将其注释掉并使用while ($row = $stmt-&gt;fetch()) { print_r($row);,您有什么? rowcounts 也可能不会做你想做的事,但 if (isset($numRows)) { 什么都不做也没关系。

标签: php mysql sql count union


【解决方案1】:

我收到的回复会连续显示每个类别而不是总数。

为什么不简单地在数据库中进行计算?

SELECT 
    (SELECT COUNT(*) AS cnt FROM sku_request WHERE completed = 0)
    + (SELECT COUNT(*) FROM sku_update WHERE completed = 0)
    + (SELECT COUNT(*) FROM rma_submissions WHERE rma_number = 'Pending')
    + (SELECT COUNT(*) FROM idTermination WHERE completed = 0)
    + (SELECT COUNT(*) FROM id_request WHERE ssoid IS NULL)
    + (SELECT COUNT(*) FROM tda_request WHERE completed = 0)
    AS res 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-15
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    相关资源
    最近更新 更多