2011-05-11 71 views
1

组织数据输出我有如下表所示数据:与MySQL

t1 (results): card_id  group_id project_id user_id 

包含实际标签中的表格:

t2 (groups): id project_id label 

t3 (cards):  id project_id label 

有可能是由不同的用户的多个条目。

我需要帮助写一个查询以表格格式显示相应的卡片/组的总数。这里是我的开始,但我不知道我是在正确的轨道上......

SELECT COUNT(card_id) AS cTotal, COUNT(group_id) AS gTotal 
WHERE project_id = $projID 

回答

1

除非我记错了,似乎所有你需要做的和card_id的为GROUP_ID给定PROJECT_ID是组并拉出数为每个组

SELECT card_id, group_id, COUNT(user_id) FROM mytable 
WHERE project_id = 001 
GROUP BY (card_id, group_id); 

编辑:

考虑到卡和组表涉及一些连接,但查询是基本相同的。仍然按卡和组进行分组,并按项目编号进行约束

SELECT c.label, g.label, COUNT(t1.user_id) FROM mytable t1 
JOIN groups g ON t1.group_id=g.id 
JOIN cards c ON t1.card_is=c.id 
WHERE t1.project_id = 001 
GROUP BY (c.card_id, g.group_id) 
ORDER BY (c.card_id, g.group_id); 

我不认为如果您只想使用SQL,就可以获得表格。您必须通过迭代结果来在代码中呈现表。你如何做到这一点取决于你使用的语言/平台。

+0

我的不好,我原来的帖子遗漏了团体和卡片的标签。我更新了我的帖子。 – santa 2011-05-11 15:51:34

+0

我使用LAMP。我假设我需要使用LEFT JOIN?.. – santa 2011-05-11 16:06:09

+0

@santa:除非要包含卡表中不再存在的card_id的行,否则不需要使用LEFT JOIN,或者不再存在于group_id中的列组表。如果您希望忽略已从卡片表格中移除的卡片,则不需要LEFT JOIN – 2011-05-11 16:12:52

1

,如果你知道一个固定的事实,有九组,然后只包括在子查询的群体 - 类似这样的:

select cTotal, g1.gTotal as Group1, g2.gTotal as Group2... etc 
from 
(SELECT COUNT(card_id) AS cTotal 
, COUNT(group_id) AS gTotal 
WHERE project_id = $projID 
AND group_id = 1) g1 
, (SELECT COUNT(card_id) AS cTotal 
, COUNT(group_id) AS gTotal 
WHERE project_id = $projID 
AND group_id = 2) g2 
etc. 
+0

我不知道可能有多少组 - 这取决于一个项目。 – santa 2011-05-11 15:50:38