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

时间:2017-12-21 15:28:17

标签: sql database laravel-5 eloquent rating-system

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

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

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

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

先谢谢。

2 个答案:

答案 0 :(得分: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将它们与评论结合起来。由于您现在正在加入内部,因此您需要在特定的表格中添加分组,否则您将拥有同一产品的多个条目。订购产品的评级为DESC,意味着最高分为最高分。通过限制查询来选择最后5个。

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

答案 1 :(得分:0)

您可以使用此查询来选择最高评分的 5 个数字:

SELECT * FROM reviews ORDER BY rating DESC LIMIT 5;

它用 (DESC) 和 (LIMIT) 降序排序,您可以使用具有最高评级的 5 行。 但建议将费率记录到单独的表中,当您选择它们​​时,使用(左连接)。可能对您有帮助。之前,如果我的英语不好,我很抱歉:)))