Php Laravel 5.2-从我的查询中删除重复项
我有这样一个问题:Php Laravel 5.2-从我的查询中删除重复项,php,laravel,laravel-5.2,Php,Laravel,Laravel 5.2,我有这样一个问题: $players = PostBalance::where('post_id', $post->id)->orderBy('id','desc')->get(); 它工作正常,返回所有值的数组,后余额有字段: ID score post_id user_id 我想删除重复的用户id并获取最大分数值。例如,如果我有: [0] = 'id' => 1 , 'score'=> 10, 'user_id'=> 1, 'post_id' =>
$players = PostBalance::where('post_id', $post->id)->orderBy('id','desc')->get();
它工作正常,返回所有值的数组,后余额有字段:
ID
score
post_id
user_id
我想删除重复的用户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
我想删除重复的用户id并仅获取具有最大分数的用户id:
结果:
您可以像下面这样使用groupBy和max方法注意:这实际上不会从DB中删除重复项,但可以用于您的查询:
$result = PostBalance::groupBy('user_id')
->max('score');
有关进一步参考,请参阅
或者,如果您想按分数排序结果,您可以这样做:
$result = PostBalance::orderBy('score', 'desc')
->groupBy('user_id')
->get();
注意:要获取group by的最大值,请尝试先运行orderBy,然后对查询运行groupBy
希望这有帮助 它只返回max-score值=30,而不是数组[0]='id'=>3,'score'=>30,'user\u-id'=>1,'post\u-id'=>1根据我的说法,如果你试图从一组结果中选择max,max将是一个结果,不是吗?我希望数组结果中没有重复的user\u-id和每个用户的max-score。如示例结果中的描述问题。我正在尝试插入orderBy,但它不起作用。请看我的更新答案,希望这能解决您的问题。我尝试过这样做,但它返回:[0]='id'=>3,'score'=>10,'user\u id'=>1,'post\u id'=>1[1]='id'=>6,'score'=>40,'user\u id'=>2,'post\u id'=>1返回最低值分数:/
$result = PostBalance::orderBy('score', 'desc')
->groupBy('user_id')
->get();