坚持使用mysql连接计数查询

坚持使用mysql连接计数查询,mysql,join,count,Mysql,Join,Count,我在连接两个查询时遇到问题,但在第二个查询中,我只想输入计数 第一个查询运行良好 SELECT DISTINCT forum_sub.sub_id, forum_id, title, text, url, forum_sub.userid, members.first_name, views FROM forum_sub, members WHERE members.userid = forum_sub.userid AND forum_sub.forum_id = 1 ORDER BY

我在连接两个查询时遇到问题,但在第二个查询中,我只想输入计数

第一个查询运行良好

SELECT DISTINCT forum_sub.sub_id, forum_id, title, text, url, forum_sub.userid, members.first_name, views 
FROM forum_sub, members 
WHERE members.userid = forum_sub.userid AND forum_sub.forum_id = 1 
ORDER BY forum_sub.timestamp DESC
其中显示以下内容:

----------------------------------------------------------------------
sub_id | forum_id | title | text | url | userid | first_name | views |
----------------------------------------------------------------------
  20   |    1     | test  | test |test | 1001   | JOhn       | 123   |
----------------------------------------------------------------------
   1   |    1     | test  | test |test | 1002   | Pete       |  23   |
----------------------------------------------------------------------
  10   |    1     | test  | test |test | 1003   | Harry      |  34   |                                                             
----------------------------------------------------------------------
但是现在我想把上面的sub_id加入到另一个名为forum_topics的表中,并计算出有多少相同的sub_id,并带来这个值

例如,我可以使用

选择sub_id,按sub_id从论坛主题组中将(sub_id)计算为主题

-----------------
|sub_id | topics|
  ---------------
|   1   |   4   |
-----------------
|   10  |   3   |
-----------------
|   20  |   5   |
----------------- 
我的问题是如何加入这两个查询,这样我就可以得到这样的结果

----------------------------------------------------------------------------
sub_id | forum_id | title | text | url | userid | first_name | views | count|
-----------------------------------------------------------------------------
  20   |    1     | test  | test |test | 1001   | JOhn       | 123   |  5   |
-----------------------------------------------------------------------------
   1   |    1     | test  | test |test | 1002   | Pete       |  23   |  4   |
-----------------------------------------------------------------------------
  10   |    1     | test  | test |test | 1003   | Harry      |  34   |  3  |                                                      
-----------------------------------------------------------------------------
任何帮助都会很好,我知道我需要使用子查询,但我几乎整天都在这样做,运气不好

试试看

group by sub_id
在第二个查询的末尾,而不是在何处。
然后将其连接到另一个表。

如果可能,首先避免选择DISTINCT。这是邪恶的。它将隐藏查询中的交叉连接等。从这个问题很难判断你到底在做什么

但是,要包含计数,您有两个选项:

一种是在查询中进行子选择:

SELECT forum_sub.sub_id, forum_id, title, text, url, forum_sub.userid, 
members.first_name, views , (SELECT COUNT(sub_id) as topics FROM forum_topics WHERE sub_id = forum_sub.sub_id) count
FROM forum_sub, members 
WHERE members.userid = forum_sub.userid AND forum_sub.forum_id = 1 
ORDER BY forum_sub.timestamp DESC
另一种方法是实际连接到您创建的子查询:

SELECT forum_sub.sub_id, forum_id, title, text, url, forum_sub.userid, 
       members.first_name, views, counts.topics
FROM forum_sub, members 
JOIN (SELECT sub_id, COUNT(sub_id) as topics FROM forum_topics GROUP BY sub_id) counts     ON (counts.sub_id = forum_sub.sub_id)
WHERE members.userid = forum_sub.userid AND forum_sub.forum_id = 1 
ORDER BY forum_sub.timestamp DESC
您还应该查看联接,而不是在from中选择多个表

SELECT forum_sub.sub_id, forum_id, title, text, url, forum_sub.userid, 
       members.first_name, views, counts.topics
FROM forum_sub
JOIN members ON (members.userid = forum_sub.userid)
JOIN (SELECT sub_id, COUNT(sub_id) as topics FROM forum_topics GROUP BY sub_id) counts ON (counts.sub_id = forum_sub.sub_id)
WHERE forum_sub.forum_id = 1 
ORDER BY forum_sub.timestamp DESC

你用论坛主题做什么?
where
子句可能需要根据您的
from
子句进行一些更改。在顶部查询中实际上不需要论坛主题,但论坛主题是子id计数所在的表,例如,该主题可能有10条评论,我想让它计算每个主题中有多少条评论。我无法实现这一点,我编辑了代码以使其更易于解释哇,你是一个非常聪明的人,谢谢,谢谢,解释得很好