对于在线游戏,我有两张表,一张列出了所有品种(马种),另一张列出了每种动物(马),我希望列出每个品种中存活和拥有的动物总数由成员(所有者!= 0)。我得到的结果是具有值的行,但不是计数为零的行。我知道我需要一个外部连接,但我一定不能正确构建它?
这是查询:
$breedquery = mysql_query("SELECT COUNT(H.breed) AS totalbreed, H.breed FROM horses H RIGHT JOIN horsebreeds B ON H.breed = B.breedname WHERE H.owner != 0 GROUP BY H.breed ORDER BY totalbreed DESC");
这是结果的快照,您可以看到它可以返回具有 1 或更多的品种,但忽略具有 0 的品种
感谢您就该问题提供的任何帮助!
最佳答案
LEFT JOIN
通常比 RIGHT JOIN
更可取——“左连接保留第一个表中的所有行,这通常更容易理解。
SELECT COUNT(H.breed) AS totalbreed, B.breedname
FROM horsebreeds B LEFT JOIN
horses H
ON H.breed = B.breedname AND H.owner <> 0
GROUP BY B.breedname
ORDER BY totalbreed DESC;
那么您需要进行两项更改:
- 将过滤器放在
ON
子句中的owner
上。否则,您将把外连接变成内连接。 - 使用
horsebreeds
中的列作为GROUP BY
和SELECT
。
关于MySQL 未从计数和外连接中获取零行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37637786/