php - Laravel 5.2 - 从我的查询中删除重复项

标签 php laravel laravel-5

我有一个这样的查询:

$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/

相关文章:

node.js - 在 Laravel 5.4 和 Node.js 上使用 Laravel Mix Error 编译 Assets

php - Laravel 5.1 服务容器 : Binding using something other than the class name?

php - 使用 Laravel 进行 GEO 位置查询 PHP 和 SQL

laravel-5 - 如何在 laravel 项目中运行 FFMPEG

php - Codeigniter Right Join with Where 条件未给出结果

laravel - 即使存在参数,Request::has() 也会返回 false

php - Laravel Blade 的 json 输出对象带有单引号?

javascript - ClearInterval() 不起作用有人知道为什么吗?

Yii框架中的PHP异步方法调用

PHP 永久 cookie