MySQL - 如何计算主查询的行数,忽略子查询行?

标签 mysql sql count subquery rows

我使用以下 MySQL 返回帖子列表及其相应的评论。

    SELECT  *
    FROM    forum_qa
            JOIN user_profiles
              ON user_id = forum_qa_author_id
            LEFT JOIN (SELECT forum_cm_id,
                              forum_cm_author_id,
                              forum_qa_id_fk,
                              forum_cm_text,
                        FROM  forum_cm
                        JOIN  user_profiles
                          ON  user_id = forum_cm_author_id) AS c
              ON forum_qa_id = c.forum_qa_id_fk
    WHERE   forum_qa_parent_id  = $forum_qa_id

如果我跑

    $data['num_answers'] = $query->num_rows();

这允许我获取返回的行数并将数组传递给我的 Controller 和 View 。

但这将返回所有 行(帖子+评论)。因此,如果 1 篇帖子有 10 条评论,则返回 10

我怎么能让这个查询只计算帖子的数量(即返回 1)而不包括子查询?

每个帖子都有一个唯一的 ID 保存在 forum_qa.forum_qa_id

每条评论都有一个保存在 forum_cm.forum_cm_id 中的唯一 ID。

感谢您的帮助——如果需要,将发布更多代码。

最佳答案

不是最快的,但你不限制使用 GROUP BY:

SELECT  *, 
  (SELECT COUNT(*) FROM forum_qa WHERE forum_qa_parent_id  = $forum_qa_id) Cnt
    FROM    forum_qa
            JOIN user_profiles
              ON user_id = forum_qa_author_id
            LEFT JOIN (SELECT forum_cm_id,
                              forum_cm_author_id,
                              forum_qa_id_fk,
                              forum_cm_text,
                        FROM  forum_cm
                        JOIN  user_profiles
                          ON  user_id = forum_cm_author_id) AS c
              ON forum_qa_id = c.forum_qa_id_fk
    WHERE   forum_qa_parent_id  = $forum_qa_id

关于MySQL - 如何计算主查询的行数,忽略子查询行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6846967/

相关文章:

python - 如何让 BigQuery 的 API 使用标准 SQL 进行查询?

php - 如何从数据库中获取行列表

mysql - 更新自定义帖子类型元值的 WordPress SQL(超过 6 个月)

php - 插入新条目并同时更新整个列

sql - 我需要将 SQL 中的所有事件分配给一个 ID,但目前每个事件都有三个 ID

Python:计算一列中单词的频率并将结果存储到数据框的另一列中

mysql - 在 MySQL 存储过程中使用选择

JAVA——代表月份和年份

mysql - 如何使用单个 SELECT 语句从表中获取多个计数

php - 使用 PHP 递归计数文件