Une erreur de jointure que je ne comprend pas

Avatar du membre
Eléphanteau du PHP | 36 Messages

14 déc. 2017, 03:22

Bonsoir,

Je viens de construire mon objet qui affiche mes articles en page d'accueil via un foreach :

Code : Tout sélectionner

public function HomeWorks(){ $limited = $this->Limited(); return $this->Cnx()->Prepare(" SELECT works.id, works.name, works.writer, works.content, works.posted, works.date, works.slug, users.email, users.username, users.avatar, comments.post_id, COUNT(comments.post_id) AS nbcoms, images.name AS imgname FROM works LEFT JOIN users ON users.username = works.writer LEFT JOIN comments ON comments.post_id = works.id LEFT JOIN images ON images.id = works.image_id WHERE works.posted = ? GROUP BY works.id ORDER BY works.date ASC LIMIT $limited ",[1]); }
Alors ça fonctionne bien ça fait bien ce que je veut, sauf que j'ai ajouter un système de like/dislikes alors je souhaite mettre en order by en fonction des likes/dislikes

Alors je fais comme ceci :

Code : Tout sélectionner

SELECT works.id, works.name, works.writer, works.content, works.posted, works.date, works.slug, users.email, users.username, users.avatar, COUNT(comments.post_id) AS nbcoms, images.name AS imgname, COUNT(likes.id_article) AS orderlike, COUNT(dislikes.id_article) AS orderdislike FROM works LEFT JOIN users ON users.username = works.writer LEFT JOIN comments ON comments.post_id = works.id LEFT JOIN images ON images.id = works.image_id LEFT JOIN likes ON likes.id_article = works.id LEFT JOIN dislikes ON dislikes.id_article = works.id WHERE works.posted = ? GROUP BY works.id ORDER BY orderlike ASC, orderdislike DESC LIMIT $limited
Les likes/dislikes sont liée par l'id_article a l'id de l'article et donc je veut qu'il compte le nombre de likes total de l'article et mette en premier les article les mieux noter et inversement pour les dislikes.

Sauf qu'il ne me retourne pas un nombre logique

j'ai deux likes sur l'article 1 et il me compte 4 etc...

je ne comprend pas ? ça fonctionne pour les commentaires j'ai bien le retour total par articles quand je fais un order by dessus les articles qui en on le plus sont bien en premier.

J'ai fais une erreur ? je ne vois vraiment pas.

Une aide serai la bienvenue Merci :)

Eléphant du PHP | 385 Messages

21 déc. 2017, 20:50

Bonjour,
Peux tu nous fournir le .sql des tables afin que nous puissions tester?

Mammouth du PHP | 1967 Messages

22 déc. 2017, 08:48

Pour avoir plusieurs count dans une même requète, il te faudra des sous-requète pour compter séparement. mais sans ta structure difficile de t'aider
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube