【问题标题】:How to sum values stacked in different Rows? PHP PDO MYSQL如何对堆积在不同行中的值求和? PHP PDO MYSQL
【发布时间】:2015-04-26 05:25:27
【问题描述】:

假设我们有一个非常简单的while行查询脚本,例如:

<?php 
include('conection.php');

    $Verd = 'Verduras';
    $smt = $con->prepare("select * from prodcts WHERE Type = :Verduras Order by PrdName ASC");
    $smt->bindParam(':Verduras', $Verd, PDO::PARAM_STR);
    $smt->execute();
while ($smr = $smt->fetch(PDO::FETCH_ASSOC, PDO::FETCH_ORI_NEXT)) 
        {
        echo '<th>'.nl2br($smr['PrdName']).'</th><th>'.nl2br($smr['SellType']).'</th><th>$'.nl2br($smr['Cost']).'</th>';
        }
?>

问题:

我怎样才能使$smr['Cost'] 的结果与其余/其他行的$smr['Cost'] 相加?

任何评论、建议、改进问题的问题或任何类型的相关答案寻求帮助和改进问题或导致解决方案等将不胜感激

提前致谢!

PS:我之前检查过其他答案,但主要是面向 mysql 的,不过我想检查一个更面向 PHP 的解决方案,以便对其进行更多控制并尽量避免(如果可能)多个查询。

【问题讨论】:

  • 您可以使用 MySQL 的聚合 COUNT()SUM() 函数。 PHP 还有一个count() 函数。
  • 那么,有没有办法避免使用第二个表来存储你想要的行然后总结它们?
  • 我不明白这一点。您能否发布一些原始数据样本和预期结果?
  • 我在上面编辑了我的评论;说PHP还有一个count()函数。您还可以使用数学运算符。
  • 非常感谢,我没想到所有这些解决方案都这么快,我会稍后再检查一遍,非常感谢

标签: php mysql pdo sum fetch


【解决方案1】:

如果你需要所有行的总和,你可以在while之前创建一个变量...

$Verd = 'Verduras';
$sum = 0;
$smt = $con->prepare("select * from prodcts WHERE Type = :Verduras Order by PrdName ASC");
$smt->bindParam(':Verduras', $Verd, PDO::PARAM_STR);
$smt->execute();
while ($smr = $smt->fetch(PDO::FETCH_ASSOC, PDO::FETCH_ORI_NEXT)) {
    echo '<th>'.nl2br($smr['PrdName']).'</th><th>'.nl2br($smr['SellType']).'</th><th>$'.nl2br($smr['Cost']).'</th>';
    $sum += $smr['Cost'];
}
echo $sum;

但如果您需要分组 $smr['PrdName'] 的值,只需创建一个新数组..

$Verd = 'Verduras';
$sum = 0;
$smt = $con->prepare("select * from prodcts WHERE Type = :Verduras Order by PrdName ASC");
$smt->bindParam(':Verduras', $Verd, PDO::PARAM_STR);
$smt->execute();
while ($smr = $smt->fetch(PDO::FETCH_ASSOC, PDO::FETCH_ORI_NEXT)) {
  $prd[$smr['PrdName']][$smr['SellType']][0] += $smr['Cost'];
}

之后,您可以使用 foreach 显示每一行... 只用SQL很容易控制,但如果你需要用PHP实现处理,希望对你有所帮助。

【讨论】:

  • 非常感谢,我没想到所有这些解决方案都这么快,我会稍后再检查一遍,非常感谢
【解决方案2】:

在开始 while 循环之前,创建一个变量。在 while 循环中,将变量增加您要添加​​的值。 例如:

$total = 0;
while ($smr = $smt->fetch(PDO::FETCH_ASSOC, PDO::FETCH_ORI_NEXT)) 
{
echo '<th>'.nl2br($smr['PrdName']).'</th>
  <th>'.nl2br($smr['SellType']).'</th>
  <th>$'.nl2br($smr['Cost']).'</th>';
$total += $smr['Cost'];
}

最后,当您调用$total 时,它将包含总和。

<?php echo $total ?>

希望对你有帮助

【讨论】:

  • 非常感谢,我没想到所有这些解决方案都这么快,我会稍后再检查一遍,非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-16
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
相关资源
最近更新 更多