2010-10-06 81 views
1

我正在使用我沒有創建的系統。該系統有3個主表:多個字段報告,在MySql中使用自定義計數

用戶,課程和用戶組。我正在使用一個名爲coursehits的額外表格。

這是一個MySQL數據庫,5.0。數據庫中沒有任何關係,因此只需向課程和用戶表中的用戶組(course_id和user_id)添加條目即可將用戶分配到課程中。同樣,如果他們開始課程,則會進入課程。

我正在計數報告數據的用戶在coursehits和usergroups中的數量。到目前爲止,我有這不一個查詢正確計算如下但這並不正確計算,結果是太高:

SELECT DISTINCT 
c.course_name, 
COUNT(ug.user_id) AS "Enrolled", 
COUNT(ch.user_id) as "Started" 

FROM courses c, usergroups ug, coursehits ch, users u 

WHERE ch.user_id = u.id 
AND ug.user_id = u.id 
AND ug.course_id = c.id 
AND ch.page_id != 4 
GROUP BY 1 

之前我做的單獨下面這不工作:

SELECT DISTINCT c.course_name, COUNT(ug.user_id) AS "Enrolled" 
FROM courses c, usergroups ug 
WHERE ug.course_id = c.id 
GROUP BY 1 

現在,我試圖在一個查詢中報告每個課程的用戶狀態,我希望這是有意義的。

+0

有爲什麼它必須是一個查詢任何特定的目的是什麼?在SQL中,最好讓兩個查詢分開執行,而不是嘗試以某種奇怪的方式進行組合。 – leafnode 2010-10-06 12:24:13

+0

爲開發者做這件事,我分別做了兩個查詢,他們工作得很好,現在做了三分之一。只是方便我想,以及推動我的SQL界限。 – Mathnode 2010-10-06 12:34:49

回答

1

嘗試:

SELECT c.course_name, 
     COUNT(DISTINCT ug.user_id) AS "Enrolled", 
     COUNT(DISTINCT ch.user_id) as "Started" 
FROM courses c 
left join usergroups ug on ug.course_id = c.id 
left join coursehits ch on ch.course_id = c.id and ch.page_id != 4 
GROUP BY c.course_name 
+0

這樣做非常感謝你,我希望我能給你一點,但我還不夠酷:(再次感謝 – Mathnode 2010-10-06 21:12:06

+0

@teatime,如果你很高興答案解決了你的問題,你應該能夠接受它(通過點擊答案左邊的勾號)。 – 2010-10-07 09:48:42