Question mysql : LEFT JOIN+COUNT


mrPringle
WRInaute impliqué
WRInaute impliqué
 
Messages: 592
Inscription: 11 Mar 2006

Question mysql : LEFT JOIN+COUNT

Message le Sam Jan 06, 2007 20:52

Bonsoir à tous et bonne année.
J'ai un petit probleme sur une requete mysql qui est censée afficher les articles d'un auteur et le nombre de commentaires associés.
Seulement, le fait qu'il n'y ait pas au moins un commentaire par article fausse les résultats, et ce malgré le LEFT JOIN. Une fois qu'il y a un article sans aucun commentaire, les prochains articles dans ce cas ne ressortent pas dans les résultats. Voici la requête :

SELECT `article`.*, COUNT(`commentaire`.`id_comment`) AS `commentaires` FROM `article` LEFT JOIN `commentaire` ON `article`.`id_art`=`commentaire`.`art_comment` WHERE `article`.`auteur_art`=1 GROUP BY `commentaire`.`art_comment` ORDER BY `article`.`visites_art` DESC

Tilt
WRInaute impliqué
WRInaute impliqué
 
Messages: 858
Inscription: 26 Mar 2005

Message le Sam Jan 06, 2007 21:33

si tu travailles sous mysql5 je te conseille d'utiliser plutôt des sous requêtes plus faciles à manier.


mrPringle
WRInaute impliqué
WRInaute impliqué
 
Messages: 592
Inscription: 11 Mar 2006

Message le Sam Jan 06, 2007 21:45

J'ai la version 4 :(
J'ai essayé quelques trucs avec des sous-requêtes et ça n'a pas été concluant (c'est peut-être du à la version, je sais pas).

Tilt
WRInaute impliqué
WRInaute impliqué
 
Messages: 858
Inscription: 26 Mar 2005

Message le Dim Jan 07, 2007 0:40

les sous requetes fonctionnent à partir de la 5 si je ne me trompe.

lefou
WRInaute discret
WRInaute discret
 
Messages: 131
Inscription: 7 Juin 2005

Message le Dim Jan 07, 2007 11:58

As-tu essayé ceci :

SELECT `article`.*, COUNT(`commentaire`.`id_comment`) AS `commentaires` FROM `article`, `commentaire` WHERE `article`.`id_art`=`commentaire`.`art_comment` AND `article`.`auteur_art`=1 GROUP BY `commentaire`.`art_comment` ORDER BY `article`.`visites_art` DESC


mrPringle
WRInaute impliqué
WRInaute impliqué
 
Messages: 592
Inscription: 11 Mar 2006

Message le Dim Jan 07, 2007 12:21

Salut,
Oui, j'avais essayé sans le left join, ça n'avait pas marché. :(
On m'a donné une autre solution, pour ceux que ça interesse, la voici :

Code: Tout sélectionner
SELECT a.*, COUNT(c.`id_comment`) AS nbcommentaire
FROM `article` AS a
LEFT JOIN `commentaire`  AS c ON a.`id_art`=c.`art_comment`
WHERE a.`auteur_art`=1
GROUP BY a.`art_id`
ORDER BY a.`visites_art` DESC


En gros, faut pas grouper sur un élément qui peut être nul, le reste c'est de l'allègement de code.


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités