Laravel показывает топ-5 анекдотов на основе голосов - PullRequest
0 голосов
/ 24 апреля 2019

У меня вопрос по поводу laravel

Я хочу показать 5 лучших анекдотов по голосам в laravel.У меня есть стол с анекдотами и стол с оценками.Я хочу получить средний балл с идентификатором шутки.Тогда покажи 5 лучших оценок.Так что вместо этого в шутке может быть 5 и 7. Это будет 6 класс.

Я пытался искать в интернете, к сожалению, безуспешно.Я пробовал разные методы, но мне не повезло

$votes = DB::table('joke_votes')
            ->groupBy('jokes_id')
            ->selectRaw('jokes_id, avg(grade)')
            ->get();

Я пробовал это, но это не сработало

Я хочу, чтобы система с помощью шутки нашла все оценки.Подсчитайте среднюю оценку и покажите 5 лучших.

Вот таблицы:

шутки: enter image description here

шутки: enter image description here

Ответы [ 2 ]

1 голос
/ 24 апреля 2019

Я хочу, чтобы система пошутила, чтобы найти все оценки.Вычислите среднюю оценку и покажите верхнюю 5 из них.

Общие запросы SQL будут более или менее похожи, если вы хотите выбрать шутки на основе оценки AVG.

SELECT 
 jokes.*
FROM (
 SELECT 
    joke_votes.joke_id
  , AVG(joke_votes.grade) AS avg_grade
 FROM 
  joke_votes
 GROUP BY  
  joke_votes.joke_id

) AS joke_votes__avg_grade
INNER JOIN 
 jokes
ON
 joke_votes__avg_grade.joke_id = jokes.id
ORDER BY 
  joke_votes__avg_grade.avg_grade DESC
LIMIT 5

Или

SELECT 
 jokes.*
FROM (
 SELECT 
    joke_votes.joke_id
  , AVG(joke_votes.grade) AS avg_grade
 FROM 
  joke_votes
 GROUP BY  
  joke_votes.joke_id
 ORDER BY 
  joke_votes.avg_grade DESC
 LIMIT 5    
) AS joke_votes__avg_grade
INNER JOIN 
 jokes
ON
 joke_votes__avg_grade.joke_id = jokes.id
ORDER BY 
 joke_votes.avg_grade DESC

Не спрашивайте меня, как это сделать в Laraval, но я уверен, что вы можете использовать поставляемые таблицы (подзапросы) в соединениях в Laraval.Когда я заглядываю в руководство раздел Соединения подзапроса

0 голосов
/ 24 апреля 2019

Можете ли вы попробовать следующий код,

$votes = DB::table('joke_votes')
        ->selectRaw('jokes_id, avg(grade) as avgGrade')
        ->groupBy('jokes_id')
        ->orderBy('avgGrade', 'desc')
        ->limit(5)
        ->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...