Laravel根据选票显示了前5个笑话

时间:2019-04-24 11:32:46

标签: php mysql sql laravel

我有一个关于laravel的问题

我想在laravel中以投票方式显示前5个笑话。我有一张带笑话的桌子和一张带成绩的桌子。我想获得带有笑话ID的平均成绩。然后显示前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 个答案:

答案 0 :(得分:1)

  

我希望系统通过一个笑话来查找所有成绩。计算   平均成绩并显示前5名。

假设您要根据AVG等级获取笑话,则一般的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

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的联接中使用交付的表(子查询)。 当我查看manual部分时子查询联接

答案 1 :(得分:0)

可以请您尝试以下代码,

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