php - Laravel 根据投票显示前 5 个笑话
问题描述
我有一个关于 laravel 的问题
我想在 laravel 中通过投票显示前 5 个笑话。我有一张有笑话的桌子和一张有成绩的桌子。我想用一个笑话 id 获得平均成绩。然后显示前5个成绩。因此,相反,一个笑话可以有 5 和 7。这将是 6 级。
我尝试在互联网上查找,但不幸的是没有运气。我尝试了不同的方法,但我没有运气
$votes = DB::table('joke_votes')
->groupBy('jokes_id')
->selectRaw('jokes_id, avg(grade)')
->get();
我试过了,但没有用
我希望系统通过一个笑话找到所有的成绩。计算平均成绩并显示它的前 5 名。
这些是表格:
解决方案
我希望系统通过一个笑话找到所有的成绩。计算平均成绩并显示它的前 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 的连接中使用交付的表(子查询)。当我查看手册部分Sub-Query Joins
推荐阅读
- java - 基于 XML 上下文的 bean 无法执行构造函数注入:未找到默认构造函数
- python - 使用 Keras 回归或我应该使用什么模型?
- php - 升级到 Laravel 6.0.x 后调用未定义函数 App\Providers\studly_case()
- r - 在字符串的开头移动字符,在 R 中保持其他字符的位置不变
- javascript - MissingSchemaError:尚未为模型“用户”注册架构。尝试了stackOverflow上的所有答案
- system-verilog - super.build_phase() 有什么作用?
- openssl - 电子如何使用openssl?
- regex - VSCode:更改自定义TextMate语法中规则的优先级?
- css - 带文字的静态栏
- python - 如何使用 python 在 kafka 消费者中聚合 json 数据?