我正在用PHP编程一个论坛,所以我来到了需要计算线程数量的部分一个论坛。我使用下面的查询来获取所有论坛和各自的类别:MySQL获得另一个表中所有行的值,该值等于当前表中的列数
SELECT f.id
, f.name
, f.description
, c.id category_id
, c.name category_name
, c.description category_description
FROM forum_forums f
JOIN forum_forums_categories fc
ON f.id = fc.forum_id
JOIN forum_categories c
ON fc.category_id = c.id;
它干得不错,我再能集团所有分类。接下来我想要做的事情是,将某个论坛中的线程数量添加到结果中的每一行,但我不确定如何执行此操作。
我有以下表格:forum_forums
,forum_threads
,forum_categories
。此外,线程可以属于多个论坛(我有一个forums_threads_forums
表,它将一个特定的thread_id
绑定到forum_id
)。
所以我的猜测是我需要在原始命令的某处添加一个计数。 此计数需要计算forum_threads_forums
表中的行,其中forum_id
等于它添加到结果中的当前论坛的行数。
为了让事情变得更简单,这里是(简化)的我想要达到一个例子: 表:forum_forums
id name
1 forum1
2 forum2
3 forum3
表:forum_threads
id title
1 thread1
2 thread2
表:forum_threads_forums
thread_id forum_id
1 1
1 2
2 1
2 3
然后我想查询返回(除其他事项外):
forum_forums.id forum_forums.name forum.threads
1 forum1 2
2 forum2 1
3 forum3 1
如果有人可以把我在这将是伟大正确的方向。
编辑:
我想我可能需要一个子查询这样的SELECT COUNT(thread_id) AS thread_count FROM forum_threads_forums WHERE forum_id=:forum_id
,但我不能确定在哪里放置这在我原来的查询
答:
以供将来参考,这里是我现在使用的工作命令:
SELECT
forum_forums.id,
forum_forums.name,
forum_forums.description,
COUNT(forum_threads_forums.thread_id) AS thread_count,
forum_categories.id AS category_id,
forum_categories.name AS category_name,
forum_categories.description AS category_description
FROM
forum_forums
LEFT OUTER JOIN
forum_threads_forums
ON
forum_forums.id=forum_threads_forums.forum_id
INNER JOIN
forum_forums_categories
ON
forum_forums.id=forum_forums_categories.forum_id
INNER JOIN
forum_categories
ON
forum_forums_categories.category_id=forum_categories.id
GROUP BY
forum_forums.id
您应该可以通过COUNT()和GROUP BY来实现此目的 – Phil 2014-10-31 00:02:11
@Phil是的,我已经使用计数命令我认为我需要,但是我会在哪里将这个命令合并到我的原始查询中?如果可能的话,我想避免必须运行两个单独的查询。 – Qub1 2014-10-31 00:03:42