循环不更新表上的值,索引明智

Posted

技术标签:

【中文标题】循环不更新表上的值,索引明智【英文标题】:loop is not updating values on table, index wise 【发布时间】:2021-06-27 04:26:54 【问题描述】:
$users = DB::table('users')->count();
//dd($users);
for($i=0; $i<$users ; $i++)
   
    $updated=DB::table('users')->where('latehours' , 0)->update(['latehours'=>$total_hours[$i]]);
    $updated=DB::table('users')->where('fine' , 0)->update(['fine'=>$fine[$i]]);
   

我有一个名为 users 的表,我想分别更新它的两列 latehour 和 fine,两列都在更新,但数组索引的第一个值,但我的循环不起作用。

数组是 $total_hours 和 $fine。 提前致谢

【问题讨论】:

你能分享你的数组值吗? array:3 [▼ 0 => 1 1 => 2 2 => 3 ] 它是 $total_hours 数组 array:3 [▼ 0 => 100 1 => 200 2 => 300 ] 它是 $fine 数组 这是你当前代码的预期结果,你想做什么?? 我想在用户 'id' 2 和 3 处拥有两个数组的数组索引 1 和索引 2 值 【参考方案1】:

您的 where 条件不匹配,因此它不会更新您的记录。

【讨论】:

它正在更新您在我所附图片中看到的值,但它并没有更新索引。表示循环和数组索引不起作用。【参考方案2】:
   $users = DB::table('users')->count();
   //dd($users);
   for($i=0; $i<$users ; $i++)
   
    $updated=DB::table('users')->where('latehours' , 0)->where('id' , ($i + 1))->update(['latehours'=>$total_hours[$i]]);
    $updatedd=DB::table('users')->where('fine' , 0)->where('id' , ($i + 1))->update(['fine'=>$fine[$i]]);
   // dd($updatedd);
   

其中存在问题,它没有迭代 id,所以我将 id 的 where 条件放在 where('id' , ($i+1)) 中。现在它运行良好。谢谢大家

db table now

【讨论】:

它在迭代!在第一次迭代之后,每个具有latehours 或fine 0 的用户都更新了,没有用户留下latehours 或fine 0。这看起来好像存在迭代问题。

以上是关于循环不更新表上的值,索引明智的主要内容,如果未能解决你的问题,请参考以下文章

Rails 迁移:重命名表上的索引

小表上的仅索引扫描非常慢

每天晚上被删除的表上的 Mysql 索引

20180523篇

Oracle SQL

提高大型表上的 SQL Server 查询性能