来自数据库的PHP循环和

来自数据库的PHP循环和,php,Php,它实际上打印出$row[paymentAmount]+$row[paymentAmount]等等,这取决于有多少个$row[paymentAmount]。但问题是,$row[paymentAmount]的最后一次输出是2500 有: 10000 10000 2500 结果是:7500 我希望是:22500 如果最后的结果是3000,则应为23000。所以我只需要这段代码从数据库中获取每一行,而不是最新的一行 编辑:我希望它位于SQL查询之外对于这样的东西,您不需要PHP逻辑。该功能直接内置于SQ

它实际上打印出$row[paymentAmount]+$row[paymentAmount]等等,这取决于有多少个$row[paymentAmount]。但问题是,$row[paymentAmount]的最后一次输出是2500

有: 10000 10000 2500

结果是:7500 我希望是:22500

如果最后的结果是3000,则应为23000。所以我只需要这段代码从数据库中获取每一行,而不是最新的一行


编辑:我希望它位于SQL查询之外

对于这样的东西,您不需要PHP逻辑。该功能直接内置于SQL中

$st = $this->db->prepare("SELECT * FROM invoices WHERE group_id=?");
$st->execute(array($id));

    if($st->rowCount() >= 1){
        foreach ($st as $row) {
            $counter = $row["paymentAmount"];
            $start = 1;

            for($start; $start < $st->rowCount(); $start++) {
                $counter = $counter + $row["paymentAmount"];
                }
        }

您应该让您的数据库处理总和,除非您有合法的理由需要用PHP处理它。使用这种类型的操作,数据库效率更高,并且可以避免PHP中的循环

SELECT SUM(paymentAmount) FROM invoices WHERE group_id=?
然后,您可以更改PHP以仅返回一行:

SELECT SUM(paymentAmount) AS TotalPaymentAmount FROM invoices WHERE group_id = ?
如果需要在SQL之外执行此计算,只需更改循环:

$row = $st->fetch();
echo $row["TotalPaymentAmount"];

如果出于某种目的需要在SQL外部对其进行编码(例如,因为需要对每一行进行进一步处理),那么我将按如下方式对其进行编码:

if($st->rowCount() >= 1){
        //init the counter to 0 before you loop through your rows
        $counter = 0;
        //the foreach will iterate over your result set and add the paymentAmount to $counter.
        foreach ($st as $row) {
            $counter += $row["paymentAmount"];
        }
        //echo results outside of the loop
        echo $counter;
}

为什么不在数据库查询中求和?@mrfloden只需回显该查询的结果。您可以使用SELECT SUMpaymentAmount AS total…,或使用$sth->FETCHOLUMN;在您的查询之后。@VincentDecaux我尝试了$st->fetchColumn;在我的$counter=$counter+row2[paymentAmount];,但它只是第一个。我该如何更改它呢?它也不会求和,它返回null。这只是从数据库中回显第一行,即使我的循环中有它。我该怎么解决这个问题?@Floden先生-我已经更新了我的答案。如果不想让数据库处理计算,只需修改PHP循环,使$counter在循环外部初始化,并在循环内部聚合。
if ($st->rowCount() >= 1) {
    $counter = 0;
    foreach ($st as $row) {
        $counter += $row["paymentAmount"];
    }
}