2013-01-14 4 views
1

J'essaie d'obtenir la valeur de comptage de deux tables et d'utiliser l'ID de membre comme clé pour compter les lignes des autres tables, j'ai ce code jusqu'à présent, mais il affiche une grande valeur pour comCount et valeur vide pour chatCount. Voici mon codeJoindre trois tables différentes

SELECT members.* 
, comments.commenter_id 
, cb.user_id 
, COUNT(comments.comment) AS comCount 
, COUNT(cb.message) AS chatCount 
FROM members 
INNER JOIN comments ON members.id = comments.commenter_id 
INNER JOIN chat_box AS cb ON members.id = cb.user_id 
WHERE members.id ='$profileId'` 
+0

Je suis sûr que, avant ajouté le chat_box se joindre à elle affiche le nombre de commentaires sans problème – kabuto178

+0

pouvez-vous Givre enregistrements d'échantillons avec résultat désiré? –

+0

Voici le violon http://sqlfiddle.com/#!2/87637/5/0 – kabuto178

Répondre

1
SELECT members.* , 
     a.commenter_id , 
     b.user_id , 
     a.totalComment , 
     b.totalChat 
FROM members 
     INNER JOIN 
     (
      SELECT commenter_id, COUNT(*) totalComment 
      FROM comments 
      GROUP BY commenter_id 
     ) a ON members.id = a.commenter_id 
     INNER JOIN 
     (
      SELECT user_id, COUNT(*) totalChat 
      FROM chat_box 
      GROUP BY user_id    
     ) b ON members.id = b.user_id 
WHERE members.id = '$profileId' 

En tant que sidenote, la requête est vulnérable SQL Injection si la valeur (s ) est venu de l'extérieur. S'il vous plaît jeter un oeil à l'article ci-dessous pour apprendre comment éviter cela. En utilisant PreparedStatements vous pouvez vous débarrasser de l'utilisation de guillemets simples autour des valeurs.

+1

Merci JW, il semble qu'il y ait était un extra 'à la fin je n'ai pas réalisé jusqu'à maintenant^_^ – kabuto178

+0

vous êtes les bienvenus ': D' –

0
SELECT members.* 
, comments.commenter_id 
, cb.user_id 
,(select COUNT(1) from comments where commenter_id = members.id) AS comCount 
,(select count(1) from chat_box where user_id = members.id) AS chatCount 
FROM members 
WHERE members.id ='$profileId'`