2010-02-12 6 views
0

J'ai une table crossReference (crossref_room_subject) avec une salle de conférence, un sujet de réunion et des ID de plage horaire. Il y a plusieurs entrées par intervalle de temps. La table subjectCode inclut également un ID subjectCodeCategory (une seule catégorie par sujet mais plusieurs sujets par catégorie). Pour une requête qui fonctionne, l'utilisateur entre plusieurs subjectCodes et je dois retourner les timeSlots où tous les subjectCodes existent. J'obtiens maintenant de bons résultats (merci encore à Sparky) en utilisant GROUP BY et HAVING mais toutes les informations nécessaires pour cette requête dans la table one: crossref_room_subject.mySQL -problème regroupant et renvoyant des valeurs correctes à l'aide de GROUP BY/HAVING

J'ai un dernier scénario qui utilise plus de variables et je n'arrive pas à le faire fonctionner. Cette fois, l'utilisateur entre plusieurs subjectCodeCategorys. Je dois lier à la table subjectCodes pour effectuer une référence croisée entre subjectCodeCategory et subjectCode. Je l'ai essayé de plusieurs façons, en changeant principalement le SELECT et/ou le GROUP BY, cela semble être l'endroit où je devrais pouvoir regrouper ces subjectCodeCategories. Mais ça ne marche pas (voir ci-dessous). Je reçois des retours pour chaque timeSlot qui a 3 retours - bien sauf qu'il ne compte que subjectCode, indépendamment de subjectCodeCategory. Je dois retourner uniquement les timeSlots où une (ou plusieurs) de chacune des trois subjectCodeCategories est représentée. J'ai essayé d'ajouter subjectCodeCategory aux clauses SELECT et/ou GROUP BY, mais je n'obtiens pas de meilleurs résultats.

Merci pour toute aide ou idées à l'avance. gris

SELECT a.meetingID, a.timeSlot DE crossref_room_subject a, b subjectCodes OÙ a.subjectID = b.subjectID ET ( b.subjectCodeCategory = 8 OU b.subjectCodeCategory = 19 OU b. subjectCodeCategory = 23 ) GROUP BY a.meetingID, a.timeSlot HAVING COUNT (*) = 3 LIMIT 0, 30

Répondre

0

I compris. Cela donne les résultats dont j'ai besoin:

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 
Questions connexes