Php SQL语句分组不正确
我正在做一个食品评论的网页,有一个名为top 10的页面,它将根据食品评论显示前10名。我目前有这个SQL,但它结合了所有的菜肴评级,并作为一个1菜组合。此SQL语句被放入PHP代码中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
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行,它将显示所有可用的行。