Php 拉威尔根据投票结果展示前五名笑话

Php 拉威尔根据投票结果展示前五名笑话,php,mysql,sql,laravel,Php,Mysql,Sql,Laravel,我有一个关于拉威尔的问题 我想在拉威尔用投票的方式展示五大笑话。我有一张有笑话的桌子和一张有分数的桌子。我想用一个笑话id获得平均成绩。然后显示前5个成绩。因此,一个笑话可以有5和7。这将是6年级 我试着上网,可惜运气不好。我尝试了不同的方法,但没有成功 $votes = DB::table('joke_votes') ->groupBy('jokes_id') ->selectRaw('jokes_id, avg(grade)')

我有一个关于拉威尔的问题

我想在拉威尔用投票的方式展示五大笑话。我有一张有笑话的桌子和一张有分数的桌子。我想用一个笑话id获得平均成绩。然后显示前5个成绩。因此,一个笑话可以有5和7。这将是6年级

我试着上网,可惜运气不好。我尝试了不同的方法,但没有成功

$votes = DB::table('joke_votes')
            ->groupBy('jokes_id')
            ->selectRaw('jokes_id, avg(grade)')
            ->get();
我试过了,但没用

我想让系统通过一个笑话找到所有的分数。计算平均成绩并显示前5名

以下是表格:

投票结果:

笑话:

我想让系统通过一个笑话找到所有的分数。计算 平均成绩,并显示前5名

一般的SQL查询或多或少类似,假设您希望根据平均等级获取笑话

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

不要问我如何在Laraval中实现这一点,但可以肯定的是,您可以在Laraval的联接中使用deliverd表(子查询)。
当我查看部分子查询联接时

能否请您尝试以下代码

$votes = DB::table('joke_votes')
        ->selectRaw('jokes_id, avg(grade) as avgGrade')
        ->groupBy('jokes_id')
        ->orderBy('avgGrade', 'desc')
        ->limit(5)
        ->get();

你想要前5个笑话,这意味着有机会,有5个笑话会有最高等级/投票权,对吗?
$votes = DB::table('joke_votes')
        ->selectRaw('jokes_id, avg(grade) as avgGrade')
        ->groupBy('jokes_id')
        ->orderBy('avgGrade', 'desc')
        ->limit(5)
        ->get();