2016-11-29 7 views
2

У меня есть запрос, как это:Laravel 5,2 - Удаление дубликатов из моего запроса

$players = PostBalance::where('post_id', $post->id)->orderBy('id','desc')->get(); 

Он работает хорошо, и вернуть массив со всеми значениями, Post противовесов имеют поля:

ID 
score 
post_id 
user_id 

I хотел бы удалить дубликат 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 

ответ

4

Вы можете использовать groupBy() и max() метод (обратите внимание: на самом деле это не приведет к удалению дубликатов из БД, но работа по вашему запросу):

$result = PostBalance::groupBy('user_id') 
        ->max('score'); 

Для получения дополнительной справки см Laravel Docs

Или, если вы хотите, чтобы упорядочить результаты по score, вы можете сделать это следующим образом:

$result = PostBalance::orderBy('score', 'desc') 
        ->groupBy('user_id') 
        ->get(); 

Примечание: Чтобы получить максимум группы по, попробуйте сначала запустить orderBy(), а затем запустите groupBy().

Надеюсь, это поможет!

+0

только возвращаемое значение максимального значения = 30, а не массив [0] = 'id' => 3, 'score' => 30, 'user_id' => 1, 'post_id' => 1 –

+0

Согласно мне max был бы единственным результатом, если вы попытаетесь выбрать максимум из набора результатов, не так ли? –

+0

Мне бы хотелось получить результат массива с не дублированным user_id и максимальным счетом для каждого пользователя. например, результат приводит к описанию вопроса. Im tryng, чтобы вставить orderBy, но он не работает хорошо –

Смежные вопросы