2009-10-07 8 views
2

J'ai des problèmes pour obtenir le nombre de messages et de sujets pour chacun des forums sur la base de données. Je peux obtenir ces valeurs en faisant 2 requêtes mais je me demande s'il est possible de le faire avec une seule requête.SQL Query: Comment faire plusieurs comptes? (Renvoyer le nombre de messages ainsi que le nombre de sujets pour chaque forum)

Cette requête obtient le nombre de sujets par forum:

select forums.forumId, forums.forumName, count(*) as Topics FROM Topics 
INNER JOIN forums ON forums.forumId = topics.forumID 
GROUP BY forums.forumId; 

Cette requête obtient le nombre de messages par forum:

Comment puis-je obtenir à la fois et considérerons le sujet en un question?

Répondre

3
SELECT forums.forumId, forums.forumName, 
     COUNT(DISTINCT topics.TopicID) AS Topics, 
     COUNT(*) as Posts 
FROM forums 
INNER JOIN 
     topics 
ON  topics.forumID = forums.forumId 
INNER JOIN 
     posts 
ON  posts.topicId = topics.topicID 
GROUP BY 
     forums.forumId 
+0

Merci, ça marche! Cette requête est en fait plus rapide que si elle ne faisait que la partie count (*). Pas de loin mais tout de même ... Une idée de l'utilisation du second compte rendrait les choses plus rapides? –

+0

Je pense que c'est juste vos résultats ont été mis en cache. Ces requêtes ont en théorie la même performance. Cependant, vous pouvez poster les plans de requête et je vais essayer de faire la différence, le cas échéant. – Quassnoi

0
SELECT forums.forumId, forums.forumName, 
     COUNT(DISTINCT topics.TopicID) AS Topics, 
     COUNT(posts.topicId) as Posts 
FROM forums 
LEFT OUTER JOIN topics 
ON  topics.forumID = forums.forumId 
LEFT OUTER JOIN posts 
ON  posts.topicId = topics.topicID 
GROUP BY 
     forums.forumId 

Vous voulez utiliser des jointures externes gauche si vous voulez compter les forums avec zéro sujets ou messages

Questions connexes