繁体   English   中英

对多行求和并按group_by列更新。 (Laravel Elqoeunt)

[英]Sum multiple rows and update by group_by a column. (Laravel elqoeunt)

我想对MySQL表中的行求和,然后合并和更新。 我试图将所有重复付款汇总为一天。 我将发布现有查询,但有一些限制。

例:

+----+------------+-------------+-------------+---------+
| id |    date    | merchant_id | investor_id | payment |
+----+------------+-------------+-------------+---------+
|  1 | 27/05/1989 |           4 |           7 |    1000 |
|  2 | 27/05/1989 |           4 |           7 |    1200 |
|  3 | 28/05/1989 |           4 |           7 |    1500 |
|  4 | 28/05/1989 |           4 |           7 |    1000 |
|  5 | 28/05/1989 |           5 |           8 |    1000 |
+----+------------+-------------+-------------+---------+

预期结果:

+----+------------+-------------+-------------+---------+
| id |    date    | merchant_id | investor_id | payment |
+----+------------+-------------+-------------+---------+
|  1 | 27/05/1989 |           4 |           7 |    2200 |
|  3 | 28/05/1989 |           4 |           7 |    2500 |
|  5 | 28/05/1989 |           5 |           8 |    1000 |
+----+------------+-------------+-------------+---------+

我尝试了这个循环。

foreach ($existing_payments as $key => $payment) 
{
    ParticipentPayment::where('payment_date',$payment->payment_date) ->update(['payment' => \DB::raw("payment+$payment->payment"]);
}      

问题1.我一次只能更新一列。

问题2。我正在以编程方式遍历行并更新值,因此,如果没有重复值,则行不会得到更新。 我必须写另一个查询来更新。 也要删除现有查询。

问题3.它仅适用于两次付款。

laravel雄辩的合并(与总和)多行并更新有什么可能的解决方案?

尝试这个:

$delete = [];
$payments = ParticipentPayment::selectRaw("GROUP_CONCAT(`id` SEPARATOR ',') `ids`")
    ->selectRaw('SUM(`payment`) `sum`')
    ->groupBy('date', 'merchant_id', 'investor_id')
    ->get();
foreach($payments as $payment)
{
    $ids = explode(',', $payment->ids);
    if(count($ids) == 1) continue;
    ParticipentPayment::whereKey($ids[0])->update(['payment' => $payment->sum]);
    $delete = array_merge($delete, array_slice($ids, 1));
}
ParticipentPayment::destroy($delete);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM