【问题标题】:Sum of a count field to get overall total计数字段的总和以获得总和
【发布时间】:2011-06-07 20:21:51
【问题描述】:

我对此很陌生,正在寻求帮助。我正在使用以下代码在当前系统中复制报告。

    <?php
     foreach ($possibleSanctionsAssociativeArray as $currentSanction => $currentSanctionDetailsArray)
    {   
        $tableHeadersArray = array ('Home Office',' Total');

        $query = "SELECT home_office, COUNT(file_id) FROM cases WHERE ".$currentSanction."='Yes' and ($refdate>='$begindate' AND $refdate<='$enddate') GROUP BY home_office";

        $title = "<p class='report_title'> <b>".getSanctionDescriptiveName($currentSanction)."</b>";
        simpleStatTable($query, $tableHeadersArray, $title);
    }
    ?>

它显示一个两列两行的表格:

HOME OFFICE    |    Total

OJA            |     82

ORL            |    634

我希望它显示第三行“OVERALL TOTAL | 716”

我尝试了几种解决方案都没有运气,我想我正在努力解决计数字段的总和,然后显示计数。

提前感谢所有帮助。

【问题讨论】:

  • simpleStatTable() 是什么?
  • @Bala R 当你读到这篇文章时,你可能会打自己一巴掌——但我不确定,我认为这是一张桌子。我没有编写这段代码,但我有操作它的任务。最重要的是,我对 MySQL/PHP 有非常基本的了解(就好像你在我最初的问题中不知道一样)并且我正在学习。我知道并不理想,但有时我们必须做我们必须做的事情。

标签: php count sum


【解决方案1】:

如前所述,除非确实需要,否则切勿在循环中使用查询。关于获得全部金额,如果您使用的是 MySQL,您可以使用WITH ROLLUP

【讨论】:

  • 感谢您的意见。我也试过这个......表格停止一起显示。我想我需要使用前面提到的 join 语句重新编写整个代码。
【解决方案2】:

我不确定这个对性能的影响,但你可以试试

SELECT SUM(totals) FROM (SELECT home_office, COUNT(file_id) AS totals FROM cases WHERE ".$currentSanction."='Yes' and ($refdate&gt;='$begindate' AND $refdate&lt;='$enddate') GROUP BY home_office AS counts_table)

【讨论】:

    【解决方案3】:

    一开始我误解了这个问题。这应该有效:

    $query = "SELECT home_office, COUNT(file_id) FROM cases
                WHERE ".$currentSanction."='Yes' and ($refdate>='$begindate' AND $refdate<='$enddate')
                GROUP BY home_office
              UNION
              SELECT 'Overall Total' AS home_office, COUNT(file_id) FROM cases
                WHERE ".$currentSanction."='Yes' and ($refdate>='$begindate' AND $refdate<='$enddate');";
    

    【讨论】:

    • 感谢您的输入,但我需要显示细分和总计。
    • @TheTwo 已更新。这应该做你想做的。
    • 再次感谢...试过了 - 仍然存在一些显示问题(在总体总数行中重复家庭办公室名称),但除此之外它还有效。我会再玩一些,但我需要去约会。非常感谢!
    • @TheTwo:我的错误:应该是'Total' as 'home_office'(已修复)
    • 再次感谢!,我不需要解决同样的问题,但代码更复杂。 :)
    【解决方案4】:
    $countTotal = 0;
    foreach() {
       $query = /*...*/
       $row = mysql_fetch_*($query);
       $countTotal += $row['count'];   
    }
    
    echo $countTotal;
    

    无论如何不要将查询放在循环中,而是使用 Join。

    【讨论】:

    • 感谢您的帮助。但它已经停止一起显示表格。就像我说的,我是新手,我正在努力学习。加入信息我看过了,但是如何写一表呢?
    猜你喜欢
    • 2013-06-07
    • 1970-01-01
    • 2011-02-14
    • 1970-01-01
    • 1970-01-01
    • 2019-07-19
    • 1970-01-01
    • 2019-09-23
    • 2021-07-15
    相关资源
    最近更新 更多