2010-02-12 52 views
0

我有一個帶有會議室,會議主題和時間槽ID的crossReference表(crossref_room_subject)。每個時隙有多個條目。 subjectCode表還包含一個subjectCodeCategory ID(每個主題只有一個類別,但每個類別有多個主題)。對於一個正在工作的查詢,用戶輸入多個subjectCodes,並且需要返回所有subjectCodes存在的時間間隔。我現在使用GROUP BY和HAVING獲得了很好的結果(再次感謝Sparky),但是在一個表中查詢需要所有信息:crossref_room_subject。mySQL -problem使用GROUP BY/HAVING分組並返回正確的值

我有最後一個場景使用更多的變量,我無法讓它工作。這次用戶輸入多個subjectCodeCategorys。我必須鏈接到subjectCodes表,以將subjectCodeCategory與subjectCode進行交叉引用。我已經嘗試了很多方法,主要是改變SELECT和/或GROUP BY,這似乎是我應該能夠將這些subjectCodeCategories分組的地方。但它不起作用(見下文)。我得到的返回每個timeSlot有3個返回 - 不錯,除了它只計算subjectCode,無論subjectCodeCategory。我只需要返回表示三個subjectCodeCategories中每一個的一個(或多個)的時間間隔。我曾嘗試添加subjectCodeCategory到SELECT和/或GROUP BY子句,但沒有得到任何更好的結果。

感謝您的任何幫助或想法提前。 灰

SELECT a.meetingID,a.timeSlot FROM crossref_room_subject一個,subjectCodes b WHERE a.subjectID = b.subjectID AND( b.subjectCodeCategory = 8 OR b.subjectCodeCategory = 19 或b。 subjectCodeCategory = 23 ) GROUP BY a.meetingID,a.timeSlot HAVING COUNT(*)= 3 LIMIT 0,30

回答

0

我計算出來。這給出我需要的結果:

SELECT a.meetingID, a.timeSlot 
FROM crossref_room_subject a , subjectCodes b 
WHERE a.subjectID = b.subjectID 
AND (b.subjectCodeCategory =8 OR b.subjectCodeCategory =19 OR b.subjectCodeCategory =23) 
GROUP BY a.meetingID, a.timeSlot 
HAVING COUNT(DISTINCT b.subjectCodeCategory) =3 LIMIT 0 , 30