将列添加到另一个COUNT的表中

时间:2015-03-27 20:15:39

标签: php mysql count left-join inner-join

我在表Subscribers中有一个订阅者列表。每次收到订阅副本时,都会在Subscriptions_FulfilmentsSubscribers.ID创建一条新记录。

我可以使用以下查询创建一个表格,显示每个订阅者ID和他们收到的副本数量:

SELECT Sub_ID, COUNT(Sub_ID) fcount FROM `Subscriptions_Fulfilments` 
GROUP BY Sub_ID

但是我需要创建一个返回Subscribers的复合查询以及一个显示Subscriptions_Fulfilments的COUNT(Sub_ID)的列。

所以我有两个问题:

A)您如何根据Subscriptions_Fulfilments中订阅者ID的COUNT,创建一个显示每个订阅者的表及其收到订阅的次数的查询?

B)我的假设是单个MySql查询完成此操作会比运行两个查询(上面的一个查询和SELECT * FROM Subscriptions更高效)并组合生成的数组用PHP。我有一种感觉,我知道答案,但我想积极地学习今天的新事物。

不幸的是,经过太多的尝试后,我显然对这方面的查询不够好,而且我几乎没有通过上述查询来展示它。如果这最终成为一个副本,我很抱歉,我在询问之前进行了长时间的努力搜索,但是很难精确搜索查询帮助......

3 个答案:

答案 0 :(得分:0)

关系数据库的一大优势是能够以允许此功能的方式对表中的数据进行连接和组合,而无需将其实际存储在单独的表中。

您可以使用以下子查询来完成此操作:

SELECT Subscribers.name, fulfilments.count FROM Subscribers
INNER JOIN (
     SELECT id, count(*) as count FROM Subscriptions_Fulfilments
     GROUP BY Sub_Id
 )fulfilments ON subscribers.id = fulfilments.id

这可能不是你正在寻找的100%而且我可能搞砸了你的名字,但希望这会让你开始在正确的地方?

答案 1 :(得分:0)

这是一个简单的示例,显示订阅者ID和他们收到的订阅号。希望它有所帮助。

步骤1:从订阅者表中选择ID 步骤2:选择每个订户收到的订阅数量 第3步:根据ID加入表格。

SELECT SubId, noSub FROM 
Subscribers sb JOIN (SELECT SubId AS sid, COUNT(*)AS noSub FROM Subscriptions_Fulfilments GROUP BY SubId)AS ss ON sb.SubId = ss.sid

答案 2 :(得分:0)

只需尝试执行此查询:

  

选择不同的Sub_ID,从(SELECT Sub_ID,COUNT(Sub_ID)fcount FROM Subscriptions_Fulfilments开始计数   GROUP BY Sub_ID);