从数据库返回平均评级(SQL)

时间:2010-11-18 16:57:23

标签: php sql database rating-system

我正在尝试创建一个评级系统,用户可以对图片/视频/音频等进行评分。我目前有两张桌子

Table: products
Cols:  product_id[PK] | name | category | type | link

这是产品表,包含有关产品的信息。如果您对产品感到困惑,可以将“产品”视为图像/视频/音频,我将其命名为这样只是为了让我更容易理解它。第二个表是评级

Table: product_ratings
Cols:  rating_id[PK] | rating | product_id | timestamp

此表存储有关用户给出的评级的信息。

我想要一个页面,它会显示所有“产品”的最高评级(平均)。到目前为止,我已经浏览了SA,并找到了以下代码:

SELECT
p.product_id, p.name,
AVG(pr.rating) AS rating_average
FROM products p
INNER JOIN product_ratings pr
ON pr.product_id = p.product_id
WHERE p.product_id = 1

这只返回特定product_id的平均评分,如何获取所有product_ids及其平均评分,以及如何通过PHP找到最高评分?

我试过了:

WHERE p.product_id < 1 AND p.product_id < 30

但这只会返回2的product_id,其名称和average_rating,我不明白。

欢迎提供指导/材料链接

3 个答案:

答案 0 :(得分:4)

试试吧:

SELECT
p.product_id, p.name,
AVG(pr.rating) AS rating_average
FROM products p
INNER JOIN product_ratings pr
ON pr.product_id = p.product_id

这也是毫无意义的表达:

WHERE p.product_id < 1 AND p.product_id < 30

因为它完全等同于

WHERE p.product_id < 1

我怀疑你有零以下的ids

答案 1 :(得分:4)

SELECT
    p.product_id,
    p.name,
    AVG(pr.rating) AS rating_average
FROM products p
INNER JOIN product_ratings pr
ON pr.product_id = p.product_id
GROUP BY p.product_id
ORDER BY rating_average DESC
LIMIT 1

答案 2 :(得分:0)

您的查询已结束。只需删除过滤所有内容的WHERE子句。

SELECT     p.product_id, p.name,
           AVG(pr.rating) AS rating_average
FROM products p
INNER JOIN product_ratings pr
ON pr.product_id = p.product_id
ORDER BY rating_average DESC

这将返回每个产品的平均值,并按结果集顶部的最高平均评分排序。

相关问题