我使用以下 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/