2011-05-11 20 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