![](/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.