MySQL查询以前工作过,现在不是吗?

时间:2012-05-04 22:51:15

标签: mysql

我遇到了一个奇怪的问题,我一点也不知道为什么它不起作用。 我有以下查询:

SELECT servers.id, servers.name, servers.address, servers.port, servers.up, servers.down, servers.genre, servers.score, servers.version, servers.country, ROUND( AVG( reviews.average ) , 0 ) AS review
FROM servers
INNER JOIN reviews ON servers.id = reviews.server
ORDER BY servers.score DESC 

几个星期前,这个查询工作正常。它旨在从“服务器”表中获取许多字段,以及“评论”表中的平均字段,其中“评论”表中的服务器与“服务器”表中的ID相同。

就像我说的,此查询之前工作正常。昨天我注意到我网站的一个重要部分无法正常工作,我发现这个查询失败了。

我已经确认正在返回1行(此时,它应该返回4,因为“servers”表中有4个条目。) 这是我执行该查询时phpMyAdmin给我的:

id    name  address  port   up    down  genre   score   version  country   review
NULL  NULL  NULL     NULL   NULL  NULL  NULL    NULL    NULL    NULL       NULL

有人可以开导我吗?我作为最后的手段来到这里,因为我被困住了。

1 个答案:

答案 0 :(得分:2)

正如评论中所述,尝试将INNER JOIN更改为将返回服务器的LEFT OUTER JOIN,无论评论表中是否存在匹配的行。此外,您没有发布架构,但请仔细检查评论表中的reviews.server列,而不是server_id。另一个问题是,您正在进行AVG这是一个分组计算,但您没有GROUP BY子句,因此我建议您添加它,因此您的完整查询应如下所示:

SELECT servers.id, servers.name, servers.address, servers.port, servers.up, servers.down, servers.genre, servers.score, servers.version, servers.country, ROUND( AVG( reviews.average ) , 0 ) AS review
FROM servers
LEFT OUTER JOIN reviews ON servers.id = reviews.server # might be reviews.server_id
GROUP BY reviews.server
ORDER BY servers.score DESC

有关GROUP BY functions的更多信息。

- 更新 -

SELECT servers.id, servers.name, servers.address, servers.port, servers.up, servers.down, servers.genre, servers.score, servers.version, servers.country, IFNULL(ROUND(AVG(reviews.average)), 0) AS review
FROM servers
LEFT OUTER JOIN reviews ON servers.id = reviews.server
GROUP BY servers.id
ORDER BY servers.score DESC
相关问题