我有一個查詢3個表:用戶的mysql統計數據 - 如何獲取每個日期範圍的列?
apiusers,用戶
- 這些包含用戶ID和名稱。
download_stats:
此包含的用戶類型(1 =用戶,2 = apiusers),日期,文件downloaded_id。
我想要做的是得到一個佈局:
|用戶ID |名稱|下載1月的統計信息|下載統計二月
等
我目前正在此查詢,這需要永遠嘗試:
SELECT name,queryuserid,count(ROWA.id) ,count(ROWB.id)
FROM (SELECT IFNULL(u.name, au.companyname) AS name,IFNULL(u.id, au.id) AS queryuserid
FROM apiusers as au, users as u
GROUP BY 2) AS users
LEFT JOIN stats_download as ROWA ON ROWA.userid=queryuserid AND ROWA.date > date('2011-01-01') AND ROWA.date < date('2011-02-01')
LEFT JOIN stats_download as ROWB ON ROWB.userid=queryuserid AND ROWB.date > date('2011-01-01') AND ROWB.date < date('2011-02-01')
GROUP BY 2;
有沒有要去這個更好的辦法?客戶希望支持按年,月和日「分組」輸出統計數據。所以那裏可能有30+的LEFT JOIN。
我認爲,要獲得這種信息'行明智',你需要做大連接。您可以使用MONTH(ROWn.date)=來優化日期選擇,而不是使用日期範圍。 –
ethrbunny
我也想知道是否有一種方法可以使用存儲過程在臨時表中累積這些信息,然後以這種逐行方式輸出它。否則,如果您想使查詢更簡單,您需要使用某種後置處理器(Perl或PHP等)來獲得此顯示。 – ethrbunny
問題的第一個問題是,將APIUsers連接到用戶的內部查詢沒有JOIN條件,因此您得到一個笛卡爾產品......它們之間有什麼關係。此外,你的RowA和RowB是相同的......你是否打算實際上滾動日期來模擬每個月的下載統計數據(例如)? – DRapp