选择sql / eloquent ORM中评分最高的产品

问题描述 投票:0回答:1

我在我的数据库中有一个产品表,与评论表有一对多的关系,评分为5星,如下所示:

# reviews
- id
- product_id
- body
- rating // possible values are 1 to 5
- created_at
- updated_at

我在网站的主页上有一个顶级产品的部分,我想展示高评价的产品。所以问题是我需要用Eloquent ORM编写一个查询来获取前5名评价很高的产品吗?

顺便说一句,请随意建议简单的SQL查询,我看看我是否能够将它们转换为雄辩的方法。

提前致谢。

sql database laravel-5 eloquent rating-system
1个回答
0
投票
SELECT p.*, AVG(r.rating) as average_rating
FROM products as p
INNER JOIN reviews as r ON r.product_id = p.id
GROUP BY p.id
ORDER BY average_rating DESC
LIMIT 5

PS:如果你想按总和排序,只需使用SUM()而不是平均值

我认为这应该可以解决问题,这将选择你所有的产品(这是你想看到的最终结果),你内心加入他们与product_id的评论。由于您现在正在加入内部,因此您需要在特定表上添加group by,否则您将拥有相同产品的多个条目。订购产品的评级为DESC,意味着最高分为最高分。通过限制查询来选择最后5个。

我不了解ORM的laravel,我只知道Doctrine是ORM。

© www.soinside.com 2019 - 2024. All rights reserved.