Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel 5.2-从我的查询中删除重复项_Php_Laravel_Laravel 5.2 - Fatal编程技术网

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();