Je ne sais pas comment titer ce problème. Corrigez-moi si vous avez de meilleurs mots.
J'ai deux tables, utilisateurs et messages. P>
User 1 | 14
User 2 | 13
...
User 9 | 4
User 10 | 4
3 Réponses :
Essayez ceci:
SELECT username, PostCount FROM (SELECT username, PostCount, IF(@PostCount = @PostCount:=PostCount, @idx:=@idx+1, @Idx:=1) AS idx FROM (SELECT u.username, COUNT(p.id) AS PostCount FROM Posts p INNER JOIN Users u ON u.id=p.author_id GROUP BY p.author_id ) AS A, (SELECT @PostCount:=0, @Idx:=1) AS B ORDER BY PostCount DESC ) AS A WHERE idx <= 10;
Vous faites une sous-requête pour chaque auteur d'extraire le postcompte et vous essayez de regrouper l'utilisateur par leur post-encote, et je pense que c'est un peu non-sens ..
Peut-être pas la meilleure solution
Ne devrait-il pas être ayant compter (p.id) dans code>? Si vous utilisez
> = code>, la sous-requête doit renvoyer une seule valeur. Vous pouvez modifier la sous-requête pour utiliser
limite 9, 1 code>.
Vous ne devriez pas utiliser distinct code>.
J'ai mis en œuvre @Barmar Suggestion dans ma réponse, je pense être le bon
Essayé la réponse de @jean et a travaillé. Cette réponse ne fait que rapporter "cette version de MySQL ne supporte pas encore" LIMITY & IN / Tout / TOUT / UN SUBQUERY "". Ma version MySQL est 5.6.20.
C'est la bonne solution, je pense: vous avez besoin de la sous-requête pour savoir combien de message a la 10ème place dans votre top dix. Ensuite, vous utilisez la requête externe pour extraire les utilisateurs de presque ce postcompte.
SELECT u.username, COUNT(p.id) AS count FROM Posts p JOIN Users u ON u.id = p.author_id GROUP BY p.author_id HAVING COUNT(p.id) >= ( SELECT COUNT(p.id) AS count FROM Posts p JOIN Users u ON u.id = p.author_id GROUP BY p.author_id ORDER BY count DESC LIMIT 9, 1 ) ORDER BY count DESC
Je pense que cela devrait être limite 9, 1 code>.
Désolé mon mauvais! Édité
Problème très intéressant :) peut avoir besoin d'une variable dans la requête, voyons ce que les gens montent.
Cela vous dérange-t-il d'ajouter des données d'échantillons afin que nous puissions voir de belles violences?
@HANKY 웃 PANKY J'ai simplifié mes données ici. Si vous souhaitez tester, vous pouvez essayer le cas "Top 2" où vous pouvez facilement simuler certaines données.