【问题标题】:Stuck with mysql join with count query使用计数查询的 mysql join 卡住了
【发布时间】:2013-11-26 17:19:03
【问题描述】:

我在加入 2 个查询时遇到问题,但在第二个查询中我只想输入计数。

第一个查询运行良好

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 并带入该值

例如我可以使用

SELECT sub_id, COUNT(sub_id) as topics FROM forum_topics GROUP BY sub_id

-----------------
|sub_id | topics|
  ---------------
|   1   |   4   |
-----------------
|   10  |   3   |
-----------------
|   20  |   5   |
----------------- 

我的问题是如何加入这 2 个查询,以便得到类似的结果

----------------------------------------------------------------------------
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  |                                                      
-----------------------------------------------------------------------------

任何帮助都会很棒,我知道我需要使用子查询,但我几乎整天都被困在这个问题上,没有运气

【问题讨论】:

  • 你用论坛主题做什么? where 子句可能需要根据您的 from 子句进行一些更改。
  • forum_topics 不应该在顶级查询中真正需要,但是 forum_topics 是 sub_id 的计数所在的表,例如该主题可能有 10 个 cmets,我希望它计算多少在每个主题中。

标签: mysql join count


【解决方案1】:

尽可能首先避免 SELECT 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

【讨论】:

  • 哇,你真是个聪明的家伙,谢谢谢谢,很好的解释
【解决方案2】:

试试

group by sub_id

在第二个查询的末尾而不是 WHERE。 然后将其连接到另一个表。

【讨论】:

  • 我无法让它工作,我已经编辑了代码以使其更易于解释
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-01
  • 1970-01-01
相关资源
最近更新 更多