我有一个关于laravel的问题
我想在laravel中以投票方式显示前5个笑话。我有一张带笑话的桌子和一张带成绩的桌子。我想获得带有笑话ID的平均成绩。然后显示前5个成绩。因此,一个笑话可以具有5和7。这将是6年级。
我试图在互联网上寻找运气,可惜没有运气。我尝试了不同的方法,但是没有运气
$votes = DB::table('joke_votes')
->groupBy('jokes_id')
->selectRaw('jokes_id, avg(grade)')
->get();
我尝试过,但是没用
我希望系统通过一个笑话来查找所有成绩。计算平均成绩并显示前5名。
这些是表格:
答案 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();