我有一个这样的查询:
$players = PostBalance::where('post_id', $post->id)->orderBy('id','desc')->get();
它运行良好并返回包含所有值的数组,过帐余额有字段:
ID
score
post_id
user_id
我想删除重复的 user_id 并获得最大分数值。例如,如果我有:
[0] = 'id' => 1 , 'score'=> 10, 'user_id'=> 1, 'post_id' => 1
[1] = 'id' => 2 , 'score'=> 20, 'user_id'=> 1, 'post_id' => 1
[2] = 'id' => 3 , 'score'=> 30, 'user_id'=> 1, 'post_id' => 1
[3] = 'id' => 4 , 'score'=> 40, 'user_id'=> 2, 'post_id' => 1
[4] = 'id' => 5 , 'score'=> 50, 'user_id'=> 2, 'post_id' => 1
[5] = 'id' => 6 , 'score'=> 60, 'user_id'=> 2, 'post_id' => 1
我想删除重复的 user_id 并仅获取得分最高的 user_id:
结果:
[0] = 'id' => 3 , 'score'=> 30, 'user_id'=> 1, 'post_id' => 1
[1] = 'id' => 6 , 'score'=> 60, 'user_id'=> 2, 'post_id' => 1
最佳答案
您可以使用 groupBy()
和 max()
方法,如下所示(注意:这实际上不会从数据库中删除重复项,但适用于您的查询):
$result = PostBalance::groupBy('user_id')
->max('score');
如需进一步引用,请参阅 Laravel Docs
或者,如果您想按分数
对结果进行排序,您可以这样做:
$result = PostBalance::orderBy('score', 'desc')
->groupBy('user_id')
->get();
注意:要获取最大分组依据,请尝试先运行 orderBy()
,然后在查询上运行 groupBy()
.
希望这有帮助!
关于php - Laravel 5.2 - 从我的查询中删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40869909/