首页 > 解决方案 > 执行 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

这是完全错误的和不受重视的结果。

标签: phplaravelloopsfor-loopforeach

解决方案


解决方案 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应该将这两个值加起来。


推荐阅读