Laravel - вложенный выбор (красноречивый) - PullRequest
0 голосов
/ 25 февраля 2020

У меня есть таблица баллов, которую я должен сгруппировать по количеству набираемых объектов и взять сумму баллов, которые я хочу вложить в этот запрос, используя Eloquent и SQL raw и взять максимальный балл из попыток и упорядочить его в соответствии с баллом. Мне нужен окончательный результат как таблица лидеров.

  $usersByScore =  Attempt::where('game_id',$id)
    ->select('user_id','attempt_no','game_id',DB::raw('SUM(score) as total_score'))
    ->groupBy('attempt_no')
    ->orderBy('total_score', 'DESC')
    ->get()

это дает мне таблицу лидеров, но в ней есть все попытки пользователя. Мне нужна только попытка максимальной оценки для каждого пользователя, упорядоченного по счету в порядке убывания.

Ответы [ 2 ]

0 голосов
/ 25 февраля 2020

Есть решение - реализован метод from для вложения запроса

$usersByScore =  Attempt::with('user')
        ->select(DB::raw('MAX(tscore) as total_score, user_id,attempt_no'))
        ->from(DB::raw('(SELECT user_id,attempt_no,SUM(score) as tscore FROM 
         attempts WHERE game_id = '.$id.' GROUP By attempt_no,user_id) AS T'))
        ->groupBy('user_id')
        ->get();
0 голосов
/ 25 февраля 2020

используйте для этого метод Different (): надеюсь, он будет работать.

$usersByScore =  Attempt::where('game_id',$id)
    ->select('user_id','attempt_no','game_id',DB::raw('SUM(score) as total_score'))
    ->groupBy('attempt_no')
    ->orderBy('total_score', 'DESC')
    ->distict()
    ->get()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...