我在我的数据库中有一个产品表,与评论表有一对多的关系,评分为5星,如下所示:
# reviews
- id
- product_id
- body
- rating // possible values are 1 to 5
- created_at
- updated_at
我在网站的主页上有一个顶级产品的部分,我想展示高评价的产品。所以问题是我需要用Eloquent ORM编写一个查询来获取前5名评价很高的产品吗?
顺便说一句,请随意建议简单的SQL查询,我看看我是否能够将它们转换为雄辩的方法。
提前致谢。
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。