Récupérer le résultat d'un COUNT() SQL

Revan -  
newkiss Messages postés 127 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'ai un petit soucis, je bosse sur un forum et je dois réussir à sélectionner le post qui a le plus de réponse.
La table est constituée de 3 champs : id_post, Numero_reponse, Text_reponse.

Je voudrais donc afficher uniquement LE ou LES posts (si plusieurs post ont le même nombre de réponses) qui ont le plus de réponses.

J'arrive bien à compter le nombre de réponses pour chaque post avec cette requête :


SELECT COUNT(id_post) FROM REPONSE GROUP BY Numero_reponse



Toutefois je n'arrive pas à transcrire "Utilise le précédent résultat et sélectionne le ou les plus grand chiffres précédemment comptés".

J'ai bien essayé avec la commande MAX() mais sans grand succès.

Pourriez-vous m'aider à me débloquer je vous prie ?

Sachant que je dois faire ça en une seule requête SQL donc pas de php ou autre langage...


Merci d'avance !

8 réponses

MyTux Messages postés 222 Date d'inscription   Statut Membre Dernière intervention   44
 
Bonjour,

Peut - être que cela pourra t'aider:

select max(nb)
from
(
  select count(id_post)
  from reponse
  group by Numero_reponse
) 


Bien à toi,
MyTux.
0
Revan
 
Merci de ta réponse rapide.

Toutefois j'ai un message d'erreur à l'exécution que je n'ai jamais eu auparavant :

#1248 - Every derived table must have its own alias

Pourrais-tu m'éclairer ?

Merci.

Cordialement,

Revan
0
MyTux Messages postés 222 Date d'inscription   Statut Membre Dernière intervention   44
 
Re bonjour,

Oui en effet, le système te demande de lui fournir un alias donc reprend la query ainsi:
select max(nb)
from
(
  select count(id_post)
  from reponse as nb
  group by Numero_reponse
) as reponse;


Avec explication de la doc mysql:
http://dev.mysql.com/doc/refman/5.0/en/from-clause-subqueries.html

Bien à toi,
MyTux.
0
Revan
 
Bonjour,

Merci bien, pour cette réponse mais malheureusement, j'ai toujours une erreur, me disant qu'il ne connait pas le champs nb, et c'est l'erreur que j'avais au début, qui fait que je ne sais pas comment récupérer le résultat du COUNT...

Pourrais-je solliciter une nouvelle fois de l'aide ?

Merci.

Cordialement,
Revan
0
MyTux Messages postés 222 Date d'inscription   Statut Membre Dernière intervention   44
 
Bonjour,

L'erreur vient de ma part. En fait la query est:
select max(nb)
from
(
  select count(id_post) as nb
  from reponse
  group by Numero_reponse
) as reponse;


Bien à toi,
MyTux.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Revan
 
Merci beaucoup cela fonctionne, enfin presque :)

En effet, j'ai deux posts qui ont deux réponses chacun, toutefois la requête ne me renvoie qu'un post sur les deux...

Tu vas me haïr, désolé :)


Cordialement,
Revan


EDIT : Rectification : En ajoutant une réponse dans le post numéro 3, donc le post numéro 3 contient 3 réponse et le post 1 2 réponses, la requête me renvoie toujours comme résultat le post 1
0
MyTux Messages postés 222 Date d'inscription   Statut Membre Dernière intervention   44
 
Bonjour,

Pour reprendre, tu veux afficher les messages qui ont le plus de postes c'est ça? Si c'est le cas, il faut imposer une limite dans ta requête. Car comment il va savoir, ceux qu'il faut afficher?

Bien à toi,
MyTux.
0
Revan
 
Pour reprendre, je veux afficher l'ID des posts contenant le plus de messages.

Dans le cas où le post 2 contient 2 messages et le post 3 2 message, le résultat de la requête doit renvoyer 2 ET 3.

Dans le cas où le post 2 contient 8 messages et les autres moins, le résultat de la requête doit être 2.

Cordialement,
Revan


EDIT : J'ai fait une erreur, j'avais inversé les champs comme un boul**, la requête fonctionne bien pour récupérer UN post, toutefois il y a toujours le soucis de récupération du cas où il y a plus d'un post avec un nombre égal de messages.
0
newkiss Messages postés 127 Date d'inscription   Statut Membre Dernière intervention   13
 
Essai ca

select id_post from reponse
group by id_post
having count(*) = (
select max(nb)
from
(
  select count(id_post) as nb
  from reponse
  group by Numero_reponse
) as reponse
)
0
newkiss Messages postés 127 Date d'inscription   Statut Membre Dernière intervention   13
 
Ou ca

SELECT id_post
FROM reponse
GROUP  BY id_post
HAVING COUNT(*) >= ALL (
     SELECT COUNT(*)
     FROM   reponse
     GROUP  BY id_post
)
0