php - 基于另一列 Laravel 的求和列

标签 php mysql laravel laravel-5

我想对 AMOUNT 列求和,结果填充 BALANCE 列。如果列 TYPE 是 DEBIT,那么它将求和..但如果列 TYPE 是 KREDIT,那么它将是负数。这是 table table image

为了创建该表,我在 Laravel Controller 中使用了此查询:

$get_result        =  DB::select( DB::raw("SELECT statement.created_at, statement.descript, statement.amount, statement.sign, statement.reference 
                                                    FROM statement,lender 
                                                    WHERE statement.created_at BETWEEN DATE_ADD(' $date_from ',INTERVAL 1 DAY) 
                                                    AND '$date_to' 
                                                    AND statement.lender_id = lender.id 
                                                    AND lender.user_id= $userId ") );

我在 View 中使用了这段代码来显示数据:

<thead>
                                <tr class="txtcenter">
                                    <th class="all">Date </th>
                                    <th class="all">Description </th>
                                    <th class="all">Amount</th>
                                    <th class="all">Type</th>
                                    <th class="all">Reference</th>
                                    <th class="all">Balance</th>
                                </tr>
                            </thead>
                            <tbody>@foreach($get_result as $statement)
                                    <tr class="accordion">
                                        <td>{{SUBSTR($statement->created_at,0,10) }}</div>
                                        <td>{{$statement->descript}} </div>
                                        <td>IDR {{number_format($statement->amount, 0, '.', ',')}}  </div> 
                                        <td>{{ $statement->sign }}  </div>
                                        <td>{{ $statement->reference }} </div>
                                        <td>  </div>
                                    </tr>@endforeach
                            </tbody>

我不知道如何编写正确的代码来计算这一切。 请帮我。 提前致谢

最佳答案

“经典”方法(这是运行总和的特殊情况)是使用相关查询:

SELECT statement.created_at, statement.descript, statement.amount, statement.REFERENCE,
    ( SELECT 
      SUM(CASE WHEN t2.descript = 'Debit'  THEN t2.amount 
               WHEN t2.descript = 'Credit' THEN -t2.amount ELSE 0 END ) 
      FROM statement t2
      WHERE t2.created_at <= statement.created_at
    ) AS Balance
FROM statement
ORDER BY statement.created_at ;

或者使用像这样的sql变量:

SET @csum := 0;
SELECT statement.created_at, statement.descript, statement.amount,
       statement.REFERENCE,
    (CASE WHEN statement.descript = 'Debit' THEN
            (@csum := @csum + statement.amount)  
          WHEN statement.descript = 'Credit' THEN 
            (@csum := @csum - statement.amount)  
         ELSE  0  
     END) as Balance
FROM statement
ORDER BY statement.created_at ;

检查sqlFiddle对于工作代码 - 不包括贷方加入和您的其他条件。

关于php - 基于另一列 Laravel 的求和列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39785706/

相关文章:

php - 计算另一个表中的行

php - 无法计数 : of NULL cells in a column of a table

php - 是否有 JavaScript 方法来执行 file_get_contents()?

php - 循环访问多个 id 错误

php - 将数组内爆到 MySQL 查询中

mysql - 在mysql中比较两年数据月明智

php - 如何将非字符串值传递到 PHP 中的准备语句中

php - Laravel 6 - SQLSTATE [23000] : Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails

php - Laravel - 按月模型过滤日期字段

php - 尽管 Laravel 中的 token 正确,Ajax 调用仍返回 419 错误