如何使用不同的值(从 1 到 3)更新前三个结果:查询以获取前 3 个结果:$top3 = DB::table('quests') ->orderby('score', 'desc') ->take(3) ->pluck('id'); 查询更新排名为 1 到 3 的列:DB::table('quests')->whereIn('id', $top3) ->first()->update(['rank', 1]) ->second()->update(['rank', 2]) ->third()->update(['rank', 3]); //of course the above updates are from my imagination :) //just trying to describe what I'm trying to do
1 回答
呼啦一阵风
TA贡献1802条经验 获得超6个赞
您的第二个查询是多余的;没有理由查询ids只是再次查询表。在一个查询/循环中完成所有操作:
$top3 = Quest::orderBy("score", "DESC")->take(3)->get();
foreach($top3 AS $index => $quest){
$quest->rank = $index+1;
$quest->save();
}
注意:这假设您有一个Quest模型;仍然可以使用DB::table(),但如果您使用 Laravel,请使用模型。
以上将在单个查询中获取 3 条记录,正确处理排序和限制,然后循环并分配排名(基于 0 $index,每次循环递增,加 1 处理)
- 1 回答
- 0 关注
- 129 浏览
添加回答
举报
0/150
提交
取消