如何计算 php 中查询结果的总和?

How do I calculate the total of a query result in php?

我想知道是否可以得到一些帮助来根据查询结果回显每列的总和。 Screenshot of table output

<?php

if ($stationid=="") {
$query  = "select * 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);
if ($total>0) {
while($row = do_fetch_result($result)){
?>

<?php 
$sum_static = $row['SUM(element_10)'];
$sum_gif = $row['SUM(element_11)'];
$sum_ibv = $row['SUM(element_12)'];
$sum_html5 = $row['SUM(element_13)'];
$sum_landing = $row['SUM(element_14)'];
$sum_revs = $row['SUM(element_15)'];
?>

<tr>
<td><?php echo $sum_static; ?></td>
<td><?php echo $sum_ibv; ?></td>
<td><?php echo $sum_gif; ?></td>
<td><?php echo $sum_html5; ?></td>
<td><?php echo $sum_landing; ?></td>
<td colspan=1><?php echo $sum_revs; ?></td>
</tr>

如果我们需要计算各个行的总和(如果我们想要 return 的只是总计,那么这不是获得总计的最有效方法),我们可以初始化 $sum_foo变量归零...

$sum_static = 0;
$sum_foo    = 0;

然后对于提取的每一行,将列值添加到 运行 总数中。

$sum_static += $row['static'];
$sum_foo  c += $row['foo'];

获取最后一行后,$sum_foo 变量将具有该列所有行的总计。


就性能而言,这是一种非常低效的只获取总数的方法。我们可以让数据库 return 总数。我们在 SELECT 列表中放弃 *,并在 SELECT 列表中指定聚合函数:

 SELECT SUM(static)   AS sum_static
      , SUM(foo)      AS sum_foo
   FROM ... 

执行查询,并获取 行 returned,该行将具有预先计算的总计...

 $row['sum_static']
 $row['sum_foo']

只需指定带聚合函数的列名即可。

SELECT SUM(column1),SUM(column2)
 FROM tablename
<?php
$overallstatic="0";
$overallgif="0";
$overallibv="0";
$overallhtml5="0";
$overalllanding="0";
$overallrev="0";
<?

<?php
$overallstatic=$overallstatic+$row['element_10'];
$overallgif=$overallgif+$row['element_11'];
$overallibv=$overallibv+$row['element_12'];
$overallhtml5=$overallhtml5+$row['element_13'];
$overalllanding=$overalllanding+$row['element_14'];
$overallrev=$overallrev+$row['element_15'];
?>

<?php
<td><?php echo $overallstatic; ?></td>
<td><?php echo $overallibv; ?></td>
<td><?php echo $overallgif; ?></td>
<td><?php echo $overallhtml5; ?></td>
<td><?php echo $overalllanding; ?></td>
<td colspan=1><?php echo $overallrev; ?></td>
?>

这有效。