2010-03-17 3 views
1

i ont la table users et j'ai posts tableau que je veux choisir parmi users les principaux utilisateurs qui ont la grande quantité de messages de la table posts et de les commander par nombre de postes je peux le faire par array_count_values() par je ne peux pas la commander maintenant je pense que si je le fais par une requête MySQL par gauche et rejoindre sera plus mieuxmysql select problème utilisateurs haut

structure de la table

posts 

id | auther_id

j'ai essayé ce

SELECT COUNT(1) cnt, u.user_id 
FROM users u 
LEFT JOIN posts p 
ON p.author_id=u.user_id 
GROUP BY u.user_id 
ORDER BY cnt DESC 
LIMIT 20 

il m'a donné cette alt text http://img511.imageshack.us/img511/6707/31154352.gif voir la flèche ce qui est ce que je viens de 2 postes sous user_id 5 ce qui est de cette première rangée

+1

qu'est-ce que vos tables ressemblent? – Luiscencio

Répondre

5

Vous devez agréger les messages par utilisateur en utilisant GROUP BY u.user_id, obtenir une valeur COUNT pour le nombre de messages et ORDER BY ce nombre, i n ordre décroissant:

SELECT COUNT(1) cnt, u.user_id 
FROM users u 
LEFT JOIN posts p 
ON p.author_id=u.user_id 
GROUP BY u.user_id 
ORDER BY cnt DESC 
LIMIT 20 
+0

Je pense qu'il a une erreur son donner le nombre d'utilisateurs et de messages –

+1

Vous devez inclure le nombre de messages à trier par lui. Vous ne voulez pas le nombre de messages par chaque utilisateur? – Andy

+0

Il vous donne le nombre de messages pour chacun des 20 meilleurs utilisateurs et leur user_id – txwikinger

2
SELECT u.user_id, COUNT(*) as post_count 
FROM users u 
INNER JOIN posts p 
USING (user_id) 
GROUP BY u.user_id 
ORDER BY post_count 
0

i utilisé cela et son travaillé est-il vrai

SELECT COUNT(1) cnt, a.auther_id 
FROM `posts` a 
LEFT JOIN users u ON a.auther_id = u.id 
GROUP BY a.auther_id 
ORDER BY cnt DESC 
LIMIT 20