![](/img/trans.png)
[英]Group array rows by multiple column values and sum another column within each group
[英]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.