2010-04-08 100 views
1

我正在嘗試運行一個查詢,它將課程中的主題總數加起來。一門課有很多科目。教師(用戶表)和班級之間有一個「老師班」表。原則聽起來很簡單,但我有一些麻煩讓我的網頁顯示每個班級的科目數量(直接與老師關聯)使用COUNT(PHP MySQL)添加行號並顯示總數

這是我迄今爲止,試圖利用用嵌套SELECT COUNT:

SELECT (SELECT count(*) FROM subjects WHERE subjects.classid = class.classid) AS total_subjects, class.classname, class.classid 

從類

然後我打電話了 'NUM_SUBJECTS' while循環中存在的全部:

  <?php echo $row['total_subjects']?> 

從上面,我收到一個類的總科目,但在同一個錶行(對於一個類)和我的其他while循環不再運行,它將返回與教師相關的所有類:(...現在一團糟!

我知道要返回一個特定的老師的類,我可以在'teacherid'會話上做一個額外的WHERE子句,但是我認爲我的查詢對於我來說變得太複雜了,以至於每個地方都會出現錯誤。任何人都可以很快解決這個問題!非常感謝

回答

0
SELECT count(*) FROM subjects GROUP BY subjects.classid 
+0

這不會幫助。它會以不特定的順序返回一個數字列表,例如:'15,22,16,23,23,24'。 – 2010-04-10 23:19:05

0

你並不需要「再選擇」,你可以做一個JOIN和count()

SELECT 
    class.*, 
    count(subjects.*) AS total_subjects 
FROM 
    class 
    LEFT JOIN subjects ON class.classid = subjects.classid 
WHERE 
    class.teacherid = ? 
GROUP BY 
    class.classid 
1

您的查詢可能不是最優的。這可能是一個好主意,將其重寫爲加入:

SELECT 
    total_subjects, 
    class.classname, 
    class.classid 
FROM class 
JOIN (
    SELECT classid, count(*) AS total_subjects 
    FROM subjects 
    GROUP BY classid 
) AS T1 
ON T1.classid = class.classid 

至於你的問題,你不需要兩個循環。這是一個包含三列的單個結果集,正如我的重寫清楚顯示的那樣。您只需要一個循環即可讀取所有結果。