执行for循环或foreach循环以更新users表



实际上,我想运行一个循环,其中用户数据应该多次更新。就像我有一个查询来获得之前的记录:

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。这意味着循环只运行一次。虽然我需要它来更新用户数据两次,但有两个用户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,您认为它返回错误的结果根据我的评论,我认为这样的事情对你来说是可行的。

在金额列上求和以获得总金额

$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应该将这两个值相加。

最新更新