MySQL获取另一个表中所有行的计数,该表中的值等于当前表中的列

Qub1

我正在用PHP编写一个论坛,因此,我进入了需要计算一个论坛中线程数量的部分。我正在使用以下查询来获取所有论坛及其各自的类别:

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_forumsforum_threadsforum_categories另外,线程可以属于多个论坛(我有一个forums_threads_forums表,其中将特定的绑定thread_idforum_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
草莓

我怀疑关于聚合函数的入门级教程未能涵盖此内容,但是无论如何...

 DROP TABLE IF EXISTS forums;
 CREATE TABLE forums
 (forum_id  INT NOT NULL AUTO_INCREMENT PRIMARY KEY
 ,forum_name VARCHAR(12) NOT NULL UNIQUE
 );


 INSERT INTO forums VALUES
 (1   ,'forum1'),(2,'forum2'),(3,'forum3');

 DROP TABLE IF EXISTS threads;
 CREATE TABLE threads
 (thread_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
 ,title VARCHAR(12) NOT NULL
 );

 INSERT INTO threads VALUES
 (1   ,'thread1'),
 (2   ,'thread2');

 DROP TABLE IF EXISTS threads_forums;
 CREATE TABLE threads_forums
 (thread_id  INT NOT NULL
 ,forum_id INT NOT NULL
 ,PRIMARY KEY(thread_id,forum_id)
 );

 INSERT INTO threads_forums VALUES
 (1          ,1),
 (1          ,2),
 (2          ,1),
 (2          ,3);

 SELECT f.*
      , COUNT(t.thread_id) threads 
   FROM forums f 
   JOIN threads_forums tf 
     ON tf.forum_id = f.forum_id 
   JOIN threads t 
     ON t.thread_id = tf.thread_id 
  GROUP  
     BY forum_id;
 +----------+------------+---------+
 | forum_id | forum_name | threads |
 +----------+------------+---------+
 |        1 | forum1     |       2 |
 |        2 | forum2     |       1 |
 |        3 | forum3     |       1 |
 +----------+------------+---------+

请注意,此解决方案将不会显示没有主题的论坛。为此,您需要使用LEFT [OUTER] JOIN代替

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何获取在另一个表的列值中没有该列值的行

MySql根据另一个表中的MAX值选择一个表中的所有行

如何从与另一个表中的所有值匹配的表中获取记录

如何选择一个具有其他列最大值的列,以及另一个表中该列的所有对应行?

MySQL-更新/设置一个表中的列等于另一个表中的MAX值

删除表中所有在另一个表中没有引用的记录

Oracle SQL 查询以检索列中的值等于另一个表中的值计数的记录

如何根据MySQL中所有三个表中的字段从另一个表中更新一个表

根据另一个表中的值更新表中的所有行,而另一个表中的值则从第三个表中获取多个值

如果列值在另一个表中不存在,则获取计数

MySQL + 调整当前查询以从另一个表中获取额外数据(每列)

根据另一个表中的值获取所有值

SQL 用另一个表的列中的值替换视图列中的所有行值

从表中选择所有行,除了具有相同 id 的另一个表中的行在另一列中具有特定值

如何创建一个列来存储 MySQL 中另一个表中所有相关记录的总和

在另一个工作表中列出表中的所有唯一值

将具有标准值的另一个表的列中的所有记录插入到表中

删除该表行后,更新另一个表以指定laravel中的列

从一个表中获取击中另一个表中所有详细信息类型的记录

将另一个表中的所有匹配值放入单个列的查询

MySQL选择所有用户ID,其中'xyz'不是另一个表的列中的值

如何找到字符串值出现在另一个表的列中的所有行?

使用主键和外键从另一个表更新表中所有行的列

使用CSV从另一个表的B列获取表A列中的值

MYSQL - 如果另一个表中不存在该值,则查询以从一个表中获取值

如何从Oracle中的另一个表获取一个表的ID计数

从另一个 mysql 表中获取行取决于另一个 mysql 表的不同值

MySQL:从另一个表中的值“修补”表中的现有数据

MySQL从另一个表中设置列值(加入3个表)