php - 执行 for 循环或 foreach 循环以更新用户表
问题描述
实际上我想运行一个循环,其中用户数据应该被多次更新。就像我之前有一个查询要获取记录:
select id, pkgid, userid from lendinglogs where status = 1
And I get the result like this:
-------------------------------
id userid pkgid
1 6 1
2 7 2
2 7 2
-------------------------------
foreach ($selectUsers as $row) {
$userid= $row->userid;
//Now I selects the earning value from the table against the userid and pkgid like:
$selectROI = DB::table('genpackageroi')->select('*')->where('userid', '=', $userid)->where('pkgid', '=', $pkgID)->where('pkgcount', '=', $pkgCount)->orderBy('id')->first();
//Returned data
------------------------------------
id userid pkgid amount
1 6 1 0.54
2 7 2 1.23
2 7 2 0.94
-----------------------------------
$value = $selectROI->amount;
//Update users data
$updateUsers = DB::statement("Update users SET earning = '$value' WHERE id = '$userid'");
}
现在用户的收入应该更新为 1.23 + 0.94 = 2.17
但是当我执行此代码时,用户数据只更新一次,只有一个值,例如:1.23,但是它应该更新为 2.17。这意味着循环只运行一次。虽然我需要它来更新用户数据 2 次,但我有两个相同的用户 ID,但包 ID 不同。我的意思是应该使用从 genpackageroi 表返回的值来更新用户的收入。
有人知道该怎么做吗?
- - - - - - - - - - - -更新 - - - - - - - - - - - - - ------------
询问:
$selectROI = DB::table('genpackageroi')->select('*')->where('userid', '=', $userid)->where('pkgid', '=', $pkgID)->where('pkgcount', '=', $pkgCount)->orderBy('id')->first();
echo "Userid: ".$selectROI->userid."<BR> Amount: ".$selectROI->amount."<BR>";
结果:
-------------------------
userid amount
15 1.08
15 1.83
--------------------------
现在我们有两个用户 id 并且两者都是相同的,它正在更新用户数据一次,而它应该更新两次,因为我们有两个针对同一个用户的值。
------------------------------------用户3532758的建议 ------------ -------------
询问:
$selectROI = DB::table('genpackageroi')->select(DB::raw('sum(amount) as total_amount'))->where('userid', '=', $userid)->where('pkgid', '=', $pkgID)->where('pkgcount', '=', $pkgCount)->groupBy('userid')->first();
dd($selectROI);
结果是:
userid amount
15 199.99999989942
15 399.99999918416
这是完全错误的和不受重视的结果。
解决方案
解决方案 2:您的更新声明。添加到数据库中的现有值。
$updateUsers = DB::statement("Update users SET earning = earning + '$value' WHERE id = '$userid'");
解决方案 1,您所说的返回错误的结果。 扩展我的评论,我认为这样的事情可能适用于您的情况。
在金额列上执行 SUM 以获得总金额
$selectROI = DB::table('genpackageroi')->select(DB::raw('sum(amount) as total_amount'))->where('userid', '=', $userid)->where('pkgid', '=', $pkgID)->where('pkgcount', '=', $pkgCount)->first();
现在$selectROI->total_amount
应该将这两个值加起来。
推荐阅读
- mongodb - 插入文档时自动包含日期字段
- xml - 如何找出导致“无法解析符号'ActivityMainBindingImpl'”的原因
- python - 如何从测试脚本中运行 WAF 编译的 C++ 程序?
- javascript - 带有字符串格式变量的正则表达式
- pandas - 如何通过检查值是否等于模式来创建二进制熊猫数据框
- python - 此错误的原因是什么,我该如何解决?
- godot - 如何在运行时更改 CollisionShape (3D) 的大小和形状?
- python - Cumsum 重启
- objective-c - 将数据从集合视图传递到表视图
- web - RuntimeError:在请求上下文之外工作。在烧瓶错误