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条评论
登录后参与评论

相关文章

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

MySQL:更新2个表中所有与另一个查询匹配的行

来自分类Dev

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

来自分类Dev

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

来自分类Dev

从另一个表中按另外两个列的计数总和顺序获取表行

来自分类Dev

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

来自分类Dev

MySql:从另一个表中通过其父表的ID获取表的总和,并返回所有具有与parent_id相关的总和值的子级

来自分类Dev

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

来自分类Dev

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

来自分类Dev

显示列的计数,该列是另一个表中的主键

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

给定另一个表的值,从一个表中检索计数

来自分类Dev

选择表中ID等于另一个表中另一个ID的行

来自分类Dev

选择表中ID等于另一个表中另一个ID的行

来自分类Dev

从表中获取计数,并从另一个表中获取详细信息

来自分类Dev

如何从另一个表中的列日期之间获取一个表中的所有记录

来自分类Dev

SQL查询以从一个表中获取数据,其中特定列等于另一表中的值

来自分类Dev

SQL COUNT来计数另一个表中的所有数字

来自分类Dev

如何使用另一个表中的所有记录作为计数列?

来自分类Dev

SQL COUNT来计数另一个表中的所有数字

来自分类Dev

SELECT 一个表的一行,以及另一个表中的所有行

Related 相关文章

  1. 1

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

  2. 2

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

  3. 3

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

  4. 4

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

  5. 5

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

  6. 6

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

  7. 7

    MySQL:更新2个表中所有与另一个查询匹配的行

  8. 8

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

  9. 9

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

  10. 10

    从另一个表中按另外两个列的计数总和顺序获取表行

  11. 11

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

  12. 12

    MySql:从另一个表中通过其父表的ID获取表的总和,并返回所有具有与parent_id相关的总和值的子级

  13. 13

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

  14. 14

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

  15. 15

    显示列的计数,该列是另一个表中的主键

  16. 16

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

  17. 17

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

  18. 18

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

  19. 19

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

  20. 20

    给定另一个表的值,从一个表中检索计数

  21. 21

    选择表中ID等于另一个表中另一个ID的行

  22. 22

    选择表中ID等于另一个表中另一个ID的行

  23. 23

    从表中获取计数,并从另一个表中获取详细信息

  24. 24

    如何从另一个表中的列日期之间获取一个表中的所有记录

  25. 25

    SQL查询以从一个表中获取数据,其中特定列等于另一表中的值

  26. 26

    SQL COUNT来计数另一个表中的所有数字

  27. 27

    如何使用另一个表中的所有记录作为计数列?

  28. 28

    SQL COUNT来计数另一个表中的所有数字

  29. 29

    SELECT 一个表的一行,以及另一个表中的所有行

热门标签

归档