Php SQL语句分组不正确

Php SQL语句分组不正确,php,sql,Php,Sql,我正在做一个食品评论的网页,有一个名为top 10的页面,它将根据食品评论显示前10名。我目前有这个SQL,但它结合了所有的菜肴评级,并作为一个1菜组合。此SQL语句被放入PHP代码中 SELECT i.path, i.name, AVG(r.review_rating), r.image_id FROM images i, review r WHERE r.image_id = i.id GROUP BY 'r.image_id' ORDER BY AVG(r.review_rati

我正在做一个食品评论的网页,有一个名为top 10的页面,它将根据食品评论显示前10名。我目前有这个SQL,但它结合了所有的菜肴评级,并作为一个1菜组合。此SQL语句被放入PHP代码中

SELECT i.path, i.name, AVG(r.review_rating), r.image_id
  FROM images i, review r
 WHERE r.image_id = i.id
 GROUP BY 'r.image_id'
 ORDER BY AVG(r.review_rating) DESC
 LIMIT 10

如果没有看到您的sql模式,就很难确切地知道需要将其更改为什么。但是看起来您可能希望使用一个
连接
,而不是从多个表中进行选择。试试这个:

SELECT i.path,
    i.name,
    AVG(r.review_rating),
    r.image_id 
FROM images i
JOIN review r ON  r.image_id = i.id 
GROUP BY r.image_id 
ORDER BY AVG(r.review_rating) DESC 
LIMIT 10
您还需要检查实际上是否有10个不同的图像(10个或更多唯一的r.image_id。您可以通过删除
分组依据
并查看结果来检查这一点)


如果这不起作用,那么发布您的模式。

如果没有看到您的sql模式,很难确切地知道您需要将其更改为什么。但是看起来您可能希望使用一个
连接
,而不是从多个表中进行选择。试试这个:

SELECT i.path,
    i.name,
    AVG(r.review_rating),
    r.image_id 
FROM images i
JOIN review r ON  r.image_id = i.id 
GROUP BY r.image_id 
ORDER BY AVG(r.review_rating) DESC 
LIMIT 10
您还需要检查实际上是否有10个不同的图像(10个或更多唯一的r.image_id。您可以通过删除
分组依据
并查看结果来检查这一点)


如果这不起作用,请发布您的模式。

问题出在
按“r.image\u id”分组

'r.image\u id'
是一个字符串,这使得
groupby
WHERE
子句过滤的所有行中创建一个组

您可能需要按r.image\u id对
进行分组


阅读有关何时在MySQL中使用的更多信息。

问题在于
按“r.image\u id”分组

'r.image\u id'
是一个字符串,这使得
groupby
WHERE
子句过滤的所有行中创建一个组

您可能需要按r.image\u id对
进行分组


阅读有关何时在MySQL中使用的更多信息。

欢迎使用堆栈溢出。请尽快阅读这一页和另一页“不起作用”不是问题的一个很好的表征。使用SQL,我们确实需要查看查询中每个表的大纲模式,以及一些(2-5?)行数据,以及对所看到的内容和希望看到的内容的描述。在没有正式模式的情况下,只给出表名、列名和示例值就足够了。GROUP BY子句中的
r.image\u id
周围的引号在做什么?它们似乎是单引号,因此您使用常量字符串进行分组,这可能意味着您只能得到一个组,因为分组“列”(值)只有一个值。如果您使用的是MySQL(识别您在SQL问题中使用的DBMS是一个好主意),那么您可能打算使用
GROUP BY`r`.`image\u id`
,不过坦白地说,我会使用
GROUP BY r.image\u id
。而表1、表2的老式
符号被SQL-92淘汰。您不应该在20多年后编写的SQL中使用它。欢迎使用堆栈溢出。请尽快阅读这一页和另一页“不起作用”不是问题的一个很好的表征。使用SQL,我们确实需要查看查询中每个表的大纲模式,以及一些(2-5?)行数据,以及对所看到的内容和希望看到的内容的描述。在没有正式模式的情况下,只给出表名、列名和示例值就足够了。GROUP BY子句中的
r.image\u id
周围的引号在做什么?它们似乎是单引号,因此您使用常量字符串进行分组,这可能意味着您只能得到一个组,因为分组“列”(值)只有一个值。如果您使用的是MySQL(识别您在SQL问题中使用的DBMS是一个好主意),那么您可能打算使用
GROUP BY`r`.`image\u id`
,不过坦白地说,我会使用
GROUP BY r.image\u id
。而表1、表2的老式
符号被SQL-92淘汰。您不应该在20多年后编写的SQL中使用它。我相信如果少于10行,它将显示有多少行是正确的?@user3567749:如果少于10行,它将显示所有可用行。我相信如果少于10行,它将显示有多少行是正确的?@user3567749:如果少于10行,它将显示所有可用的行。