我正在做一个食品评论的网页,有一个名为前10名的页面,根据食品评论,它将显示前10名。我目前有这个SQL,但它结合了所有的菜肴评级,并结合为一个菜。此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
答案 0 :(得分:1)
如果没有看到您的sql架构,很难确切地知道您需要将其更改为什么。但看起来您可能希望使用JOIN
而不是从多个表中进行选择。试试这个:
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。您可以通过删除GROUP BY
并查看结果来检查这一点。)
如果不起作用,请发布您的架构。
答案 1 :(得分:1)
问题出在GROUP BY 'r.image_id'
上
'r.image_id'
是一个字符串,这使GROUP BY
从WHERE
子句筛选的所有行中创建一个组。
您可能想要GROUP BY r.image_id
。
详细了解何时在MySQL中使用apostrophes, quotes and backticks。