对于在线游戏,我有两个表,其中列出了所有品种(马匹),另一个表列出了每个动物(马),我希望列出每个品种的活着和拥有的动物总数由成员(所有者!= 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 :(得分: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;
然后您需要进行两项更改:
owner
子句中的ON
上。否则,您将外部联接转换为内部联接。horsebreeds
中GROUP BY
和SELECT
的列。