Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从数据库返回平均评级(SQL)_Php_Sql_Database_Rating System - Fatal编程技术网

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

Php 从数据库返回平均评级(SQL),php,sql,database,rating-system,Php,Sql,Database,Rating System,我正在尝试创建一个评级系统,用户可以对图片/视频/音频等进行评级。目前我有两个表 Table: products Cols: product_id[PK] | name | category | type | link 这是products表,包含有关产品的信息。如果你对产品感到困惑,把“产品”想象成图像/视频/音频,我这样命名是为了让我更容易理解它。第二个表是评级 Table: product_ratings Cols: rating_id[PK] | rating | product_

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

Table: products
Cols:  product_id[PK] | name | category | type | link
这是products表,包含有关产品的信息。如果你对产品感到困惑,把“产品”想象成图像/视频/音频,我这样命名是为了让我更容易理解它。第二个表是评级

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
这只是返回一个特定产品id的平均评分,如何获取所有产品id及其平均评分,如何通过PHP找到最高评分

我试过:

WHERE p.product_id < 1 AND p.product_id < 30
其中p.product_id<1和p.product_id<30
但这只是返回产品的id为2,它的名称和平均评分,我不明白

欢迎提供指导/材料链接

请尝试:

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
其中p.product_id<1和p.product_id<30
因为它完全等同于

WHERE p.product_id < 1
其中p.product\u id<1
我怀疑您的ID是否低于零

请尝试:

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
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
这也是毫无意义的表达:

WHERE p.product_id < 1 AND p.product_id < 30
其中p.product_id<1和p.product_id<30
因为它完全等同于

WHERE p.product_id < 1
其中p.product\u id<1

我怀疑您的ID是否低于零

您的查询已经结束。只需删除筛选所有内容的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
GROUP BY p.product_id
ORDER BY rating_average DESC
LIMIT 1
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

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

您的查询已结束。只需删除筛选所有内容的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


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

我键入lol的速度太慢,这正是我所想的。谢谢Mark,这似乎是我最初想要的。现在,我们将环顾四周,看看如何选择列表中的第一项(即最高评级的产品)。您还可以使用Mark的查询作为
from
子句的子选择,这样,您将能够获得
MAX(评级)
超过你的平均评分结果。哪个数据库不需要group by中的所有非聚合字段?我只是在键入lol时太慢了。这正是我所想的。谢谢马克,这似乎正是我最初想要的。现在,我们将环顾四周,看看如何选择列表中的第一项(即最高评级的产品)。您还可以使用Mark的查询作为
from
子句的子选择,这样,您将能够获得
MAX(评级)
超过您的平均评级结果。哪个数据库不需要group by中的所有非聚合字段?您为什么给出“where p.product_id=1”?这只是为了证明给定的SQL返回指定产品id的平均评级为什么给出“where p.product_id=1”?这只是为了证明给定的SQL返回指定产品id的平均评级。由于某种原因,这只显示1行,请参见上面的Mark Byers,his似乎列出了之前已评级的所有产品id。由于某种原因,这只显示1行,请参见上面的Mark Byers,他似乎列出了所有以前被评级过的产品id。我的意思是大于1,小于30,我很困惑,我想哪个数据库不需要分组?太可怕了!那么它用什么名字呢?不确定的它实际上是按名称分组的吗,您不需要在列表中指定它?我的意思是大于1小于30,我很困惑,我想哪个数据库不需要按名称分组?太可怕了!那么它用什么名字呢?不确定的它实际上是按名称分组的,您不需要在列表中指定它吗?