2013-04-25 37 views
0

我試圖獲取特定項目在特定月份中查看的次數。mysql在給定月份中查看組件的數量

我有一個看錶看起來是這樣的:

id_component viewed_date 
1 | 2013-03-25 11:40:04 
3 | 2013-03-26 11:41:04 
4 | 2013-04-05 11:42:04 
2 | 2013-04-07 11:43:04 
3 | 2013-04-12 11:44:04 
4 | 2013-04-17 11:45:04 
3 | 2013-04-18 11:46:04 
2 | 2013-04-20 11:47:04 
4 | 2013-04-22 11:48:04 

我有一個分量表是這樣的:

id, component_name, component_desc, component_price, folder_id 
1 | muffler | ford focus muffler | 99.00 | 3 
2 | air filter| ford focus air filter | 12.00 | 3 
3 | oil filter| ford focus oil filter | 6.00 | 3 
4 | wiper | ford focus rear wiper | 6.00 | 3 

我當前的查詢是這樣的:

SELECT MONTHNAME(viewed_date) AS vmonth, YEAR(viewed_date) AS vyear, COUNT(*) AS vcount 
FROM viewed AS V 
RIGHT JOIN components AS C on V.id_component = C.id 
WHERE id_component IN (SELECT id FROM components WHERE folder_id = '3') 
GROUP BY YEAR(V.viewed_date), MONTH(V.viewed_date) 
ORDER BY V.viewed_date 

我想回來的是這樣的:

vmonth = march, vyear = 2012, vcount = 1, id = 1, component_name = muffler, etc. etc. 
vmonth = april, vyear = 2012, vcount = 1, id = 2, component_name = air filter, etc. etc. 
vmonth = march, vyear = 2012, vcount = 1, id = 3, component_name = oil filter, etc. etc. 
vmonth = april, vyear = 2012, vcount = 2, id = 3, component_name = oil filter, etc. etc. 
vmonth = april, vyear = 2012, vcount = 3, id = 4, component_name = wiper, etc. etc. 

我得到這個

vmonth = march, vyear = 2012, vcount = 4 
vmonth = april, vyear = 2012, vcount = 9 

我沒有得到的加入數據或對單個組件的數據...只是每月彙總文件夾

它得是什麼愚蠢我正在做...任何建議?

回答

0

由於您在您的查看錶中只有兩個不同的值(一年,一月)進行分組,因此您只能獲得兩行。您需要添加第三列 - id_component以獲得您想要的結果。此外,你似乎不希望每個月,每年和ID的組合看到0,所以你需要INNER JOIN而不是外部的。

該查詢應該給你所需的輸出:

SELECT v.vmonth, v.vyear, v.vcount, c.id, concat(c.component_name, ', etc. etc.') AS component_name 
FROM components c 
JOIN (SELECT MONTHNAME(viewed_date) AS vmonth, YEAR(viewed_date) AS vyear, id_component, count(*) AS vcount 
     FROM viewed 
     GROUP BY vmonth, vyear, id_component) v 
ON v.id_component = c.id 
+0

所以基本上我做的倒退!大聲笑感謝你,它的工作就像一個魅力! – ppetree 2013-04-25 14:42:04