You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PHP中计算查询结果总计并输出各列求和值?

在PHP中计算数据库查询结果的列总计并输出求和值

看起来你想要实现的是:先展示符合条件的数据库记录中指定列的数值,然后在表格末尾输出这些列的总计求和值。不过从你给出的代码来看,目前的写法存在一些问题——比如你在查询里用了select *,但却试图从结果行中获取SUM(element_10)这类聚合值,这是行不通的,因为SUM()是聚合函数,需要在SQL语句里明确声明才能得到结果。

下面给你两种可行的实现方案:

方案1:利用SQL直接计算总计(推荐)

数据库对聚合计算的效率比PHP更高,所以优先推荐这种方式。你可以分两次查询:一次获取所有明细数据,一次获取各列的总计值;或者用UNION ALL把明细和总计合并成一个结果集。

示例代码(分两次查询)

<?php
if ($stationid == "") {
    // 1. 查询明细数据
    $query = "SELECT element_10, element_11, element_12, element_13, element_14, element_15 
              FROM " . $tablename . " 
              WHERE date_created >= '" . $startdate . "' 
                AND date_created <= '" . $enddate . "' 
                AND status='1' 
              ORDER BY id desc";
    $result = do_query($query);
    $total = mysql_num_rows($result);

    // 2. 查询各列的总计值
    $sum_query = "SELECT SUM(element_10) as sum_static, 
                         SUM(element_11) as sum_gif, 
                         SUM(element_12) as sum_ibv, 
                         SUM(element_13) as sum_html5, 
                         SUM(element_14) as sum_landing, 
                         SUM(element_15) as sum_revs 
                  FROM " . $tablename . " 
                  WHERE date_created >= '" . $startdate . "' 
                    AND date_created <= '" . $enddate . "' 
                    AND status='1'";
    $sum_result = do_query($sum_query);
    $sum_row = do_fetch_result($sum_result);
?>

<?php if ($total > 0) { ?>
<table>
    <!-- 表头部分 -->
    <tr>
        <th>Static</th>
        <th>IBV</th>
        <th>GIF</th>
        <th>HTML5</th>
        <th>Landing</th>
        <th>Revs</th>
    </tr>
    <?php while($row = do_fetch_result($result)){ ?>
    <tr>
        <td><?php echo $row['element_10']; ?></td>
        <td><?php echo $row['element_12']; ?></td>
        <td><?php echo $row['element_11']; ?></td>
        <td><?php echo $row['element_13']; ?></td>
        <td><?php echo $row['element_14']; ?></td>
        <td><?php echo $row['element_15']; ?></td>
    </tr>
    <?php } ?>
    <!-- 输出总计行 -->
    <tr style="font-weight: bold;">
        <td><?php echo $sum_row['sum_static'] ?: 0; ?></td>
        <td><?php echo $sum_row['sum_ibv'] ?: 0; ?></td>
        <td><?php echo $sum_row['sum_gif'] ?: 0; ?></td>
        <td><?php echo $sum_row['sum_html5'] ?: 0; ?></td>
        <td><?php echo $sum_row['sum_landing'] ?: 0; ?></td>
        <td><?php echo $sum_row['sum_revs'] ?: 0; ?></td>
    </tr>
</table>
<?php } ?>
<?php } ?>

方案2:在PHP循环中累加计算

如果不想额外执行一次查询,也可以在遍历明细数据的同时,用变量累加各列的数值,最后输出总计。

示例代码

<?php
if ($stationid == "") {
    $query = "SELECT element_10, element_11, element_12, element_13, element_14, element_15 
              FROM " . $tablename . " 
              WHERE date_created >= '" . $startdate . "' 
                AND date_created <= '" . $enddate . "' 
                AND status='1' 
              ORDER BY id desc";
    $result = do_query($query);
    $total = mysql_num_rows($result);

    // 初始化累加变量
    $total_static = 0;
    $total_gif = 0;
    $total_ibv = 0;
    $total_html5 = 0;
    $total_landing = 0;
    $total_revs = 0;
?>

<?php if ($total > 0) { ?>
<table>
    <tr>
        <th>Static</th>
        <th>IBV</th>
        <th>GIF</th>
        <th>HTML5</th>
        <th>Landing</th>
        <th>Revs</th>
    </tr>
    <?php while($row = do_fetch_result($result)){ 
        // 累加各列数值
        $total_static += $row['element_10'];
        $total_gif += $row['element_11'];
        $total_ibv += $row['element_12'];
        $total_html5 += $row['element_13'];
        $total_landing += $row['element_14'];
        $total_revs += $row['element_15'];
    ?>
    <tr>
        <td><?php echo $row['element_10']; ?></td>
        <td><?php echo $row['element_12']; ?></td>
        <td><?php echo $row['element_11']; ?></td>
        <td><?php echo $row['element_13']; ?></td>
        <td><?php echo $row['element_14']; ?></td>
        <td><?php echo $row['element_15']; ?></td>
    </tr>
    <?php } ?>
    <!-- 输出总计行 -->
    <tr style="font-weight: bold;">
        <td><?php echo $total_static; ?></td>
        <td><?php echo $total_ibv; ?></td>
        <td><?php echo $total_gif; ?></td>
        <td><?php echo $total_html5; ?></td>
        <td><?php echo $total_landing; ?></td>
        <td><?php echo $total_revs; ?></td>
    </tr>
</table>
<?php } ?>
<?php } ?>

重要提醒

你当前使用的mysql_*系列函数已经被PHP官方废弃,并且在高版本PHP中完全移除了,存在安全风险(比如SQL注入)。建议尽快迁移到mysqli_*或者PDO扩展,同时记得使用预处理语句来防止SQL注入,比如用参数绑定替代直接拼接SQL字符串。

内容的提问来源于stack exchange,提问作者wolverine_1024

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:00:33