1

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

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_id 及其平均评分,以及如何通过 PHP 找到最高评分?

我试过了:

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

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

欢迎提供指导/材料链接

4

3 回答 3

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

我怀疑你的 id 低于零

于 2010-11-18T16:59:35.620 回答
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
于 2010-11-18T16:59:54.607 回答
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

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

于 2010-11-18T17:00:27.710 回答