我是一名前端开发人员,请怜悯我的灵魂,因为可怕的 PHP 和 SQL,我是来学习的!
所以,我有几个表,我们称它们为“类别”和“帖子”
我的“类别”表有这些字段:
- 类别ID
- 类别名称
- 类别显示名称
我的“posts”表有这些字段:
- 帖子ID
- 帖子标题
- postCategoryID
- 其他无重要字段
我可以非常简单地输出我所有的类别:
$getCategories = mysql_query("SELECT categoryID, name, displayName
FROM jobCategories
ORDER BY categoryID ASC");
$numberOfCategories = mysql_num_rows($getCategories);
然后我可以做一个 while 循环并输出所有类别:
if ($numberOfCategories > 0) {
while($row = mysql_fetch_array($getCategories)) {
$categoryID = $row['categoryID'];
$name = $row['name'];
$displayName = $row['displayName'];
echo "<li>" . $displayName . "</li>";
// I'm using the other variables to create a link
}
}
现在,问题来了: 我想要 while 循环中的一个变量,它是所有具有该类别 ID 的帖子的计数。我不确定我是否可以执行子查询,或者我是否必须执行连接才能输出该变量。
作为次要问题,所讨论的 PHP 是否正常,或者错过了一种更简单/更清洁的方式来做我正在做的事情?
提前致谢:)
最佳答案
这将返回您的 jobCategories 表,其中包含一个额外的列 postsCount
,该列等于与该行的类别 ID 匹配的帖子数。
SELECT categoryID, categoryName, categoryDisplayName, IFNULL(postsCounts.cnt, 0) AS postsCount
FROM jobCategories
LEFT JOIN (
SELECT postCategoryID, count(*) as cnt
FROM posts
GROUP BY postCategoryID
) postCounts
ON postCounts.postCategoryID = jobCategories.categoryID
关于php - MySQL:如何返回一个表中的所有行并计算另一个表中具有匹配 ID 的行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30582372/