2010-02-03 2 views
5

J'ai une base de données avec les deux tables suivantes, UTILISATEURS, POSTES Je cherche un moyen d'obtenir le nombre de messages d'un utilisateur.MySQL Trouver le nombre total de publications par utilisateur

Users   Posts 
+----+------+ +----+---------+-----------+ 
| ID | Name | | ID | user_id | Name  | 
+----+------+ +----+---------+-----------+ 
| 1 | Bob | | 1 | 1  | Blargg... | 
+----+------+ +----+---------+-----------+ 
| 2 | Jim | | 2 | 1  | Blargg... | 
+----+------+ +----+---------+-----------+ 
| 3 | Jo | | 3 | 2  | Blargg... | 
+----+------+ +----+---------+-----------+ 

J'ai essayé plusieurs variantes de la commande SQL suivante sans aucun succès. Au lieu de montrer le nombre de messages pour un seul utilisateur, il affiche une seule ligne avec tous les messages comme le nombre.

SELECT users.* , COUNT(Posts.user_id) 
FROM users 
LEFT JOIN Posts ON users.id = Posts.user_id 

En fin de compte, je veux quelque chose comme ça

+----+------+ 
| ID | Count| 
+----+------+ 
| 1 | 2 | 
+----+------+ 
| 2 | 1 | 
+----+------+ 

Répondre

6

figured it out. Smacks auto dans la tête

SELECT users.*, count(posts.user_id) 
FROM posts LEFT JOIN users ON users.id=posts.user_id 
GROUP BY posts.user_id 
1
select users.*, count(posts.user_id) 

from users, posts 
where users.user_id = posts.user_id 
group by posts.user_id 

Mais la meilleure façon est d'ajouter trop un champ à la table des utilisateurs et de garder la quantité de messages envoyés par chaque utilisateur, et mis à jour chaque fois un poste est créé ou supprimé . Sinon, vous ralentirez votre DB quand il s'agrandira.

+1

Sans une jointure lefft ... vous excluez tous les utilisateurs sans publication. –

Questions connexes