【问题标题】:Execute for loop OR foreach loop to update users table执行 for 循环或 foreach 循环以更新用户表
【发布时间】:2020-12-25 00:26:54
【问题描述】:

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

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

这是完全错误的和未考虑的结果。

【问题讨论】:

  • 选择ROI时,可以groupby user_idsum the amount。这会给你我假设的总投资回报率

标签: php laravel loops for-loop foreach


【解决方案1】:

解决方案 2:您的更新声明。添加到数据库中的现有值。

$updateUsers = DB::statement("Update users SET earning = earning + '$value' WHERE id = '$userid'");

解决方案 1,您所说的返回错误的结果。 扩展我的 cmets,我认为这样的事情可能适用于您的情况。

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

$selectROI = DB::table('genpackageroi')->select(DB::raw('sum(amount) as total_amount'))->where('userid', '=', $userid)->where('pkgid', '=', $pkgID)->where('pkgcount', '=', $pkgCount)->first();

现在$selectROI-&gt;total_amount 应该将这两个值相加。

【讨论】:

  • 这个查询给了我这些值'userid: 15, amount: 199.99999989942 userid: 15, amount:399.99999918416。虽然它应该像 1.83 + 1.08 = 2.91。
  • hmm...您能否更新问题以包含 pkgcount 数据?另外,如果你可以在查询运行后dd($selectROI),并分享截图,它可能有助于获得更清晰的图片
  • 这里是屏幕截图:prnt.sc/ucfjuq 和 dd($selectROI)。而 pkg count 就像如果用户只有一个包,那么所有 100 行的列值为 pkg count 1 的 100 行。如果用户有两个包,那么将有另外一组 100 行该包的值,并且 pkgcount 列中的值为 2。
  • 这里是另一个屏幕截图prnt.sc/ucfm1x 使用这个命令: $selectROI = DB::table('genpackageroi')->select('*')->where('userid', ' =', $userid)->where('pkgid', '=', $pkgID)->where('pkgcount', '=', $pkgCount)->orderBy('id')->first(); echo "Userid: ".$selectROI->userid."
    金额: ".$selectROI->amount."
    ";
  • hmm 让我考虑一下,顺便说一句,无论如何我都需要调整我的解决方案,因为我错过了第一次选择中重复的用户 ID $selectUsers
猜你喜欢
  • 2018-01-14
  • 1970-01-01
  • 1970-01-01
  • 2019-04-04
  • 2018-08-20
  • 1970-01-01
  • 2014-04-19
  • 1970-01-01
  • 2012-10-02
相关资源
最近更新 更多