php - MySQL:如何返回一个表中的所有行并计算另一个表中具有匹配 ID 的行数

标签 php mysql count categories

我是一名前端开发人员,请怜悯我的灵魂,因为可怕的 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/

相关文章:

ruby-on-rails-3 - 如何返回 rails 中不为空的列数

java - 计算给定字符串中某个字符的出现次数

javascript - 填充表单

php mkdir() 和 apache 所有权问题

php - 如何在一页中显示来自不同数据库表的数据

mysql 表单元数据

mysql - 我在 MySQL 中有两个具有相同列的表。有没有办法检测它们之间的变化?

php - xDebug 似乎安装正常,但无法与 NetBeans 连接

php - 查询带有单引号的文本的问题

Mysql统计用户的列数,并按修改日期分组