我想对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);
问题内容: 我想更新一个表以指示某些行是其他行的父表,因此我在表中添加了“父代”列。以下查询查找所有父母: 但是当我尝试修改该语法以进行更新时,它不起作用: 我得到: 请注意,第7行第28列是“ SET”行的结尾。 问题答案: Oracle不支持语句中的子句。 用这个:
问题内容: 我有一个MySql表,我想查询其中 成对 的列在特定集中的行。例如,假设我的表格如下所示: 现在,我希望提取其中 (f1,f2) 对为(’a’,30)或(’b’,20)的行,即行2,3,4。我也希望使用“ IN”样式的过滤器来完成此操作,因为我可能有很多对要提取。如果我尝试类似的方法: 我得到IN子句中为f1和f2指定的值的笛卡尔积,即具有f1 =’a’或’b’的所有可能组合的行,以及
问题内容: 如何更新子查询中也存在的表?我必须分两个阶段进行吗?(创建一个临时表-将选定的数据放入其中,然后更新最终表) 我正在尝试使用每个CTN的网络标签更新invoiceLine表。 最终结果将是: invoiceLine 我有以下表格: invoiceLine ctn network 1234 null 2345 null 3456 null terminal ctn network 123
问题内容: 我需要编写一个过程,该过程将允许我选择x数量的行,并同时更新这些行,以便调用应用程序将知道这些记录已锁定并正在使用。我在表中有一个名为“锁定”的列。下次调用该过程时,它将仅提取下一个x数量未选中“锁定”列的记录。我已经阅读了一些有关SQL Server的OUTPUT方法的信息,但是不确定这是我想要做的。 问题答案: 使用OUTPUT投票表决Cade Roux的答案: 之前: 这是我可以
首先,请让我知道我正在做的是不是对dplyr的不当使用,因为我不确定我是否以最佳方式实现了这一点。我有以下数据帧: 我想做的过滤有点罗嗦,但我会尝试-我想通过删除col1 == '0 '的所有行来过滤数据帧,如果该行出现在该用户的第一行之后,其中col1 == '1 '。(粗体表示我把原问题搞砸了,把0和1调换了)。 例如,对于用户7,第3行的col1 == '1 ',所以我想过滤第3行之后col
问题内容: 当ORDER BY基于CASE语句时,选择多个ORDER BY列的正确MS SQL语法是什么? 以下对于单列工作正常,但我需要按多列进行排序: 问题答案: 你可以试试这个