Une erreur de jointure que je ne comprend pas

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Une erreur de jointure que je ne comprend pas

Re: Une erreur de jointure que je ne comprend pas

par Spols » 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

Re: Une erreur de jointure que je ne comprend pas

par kevin254kl » 21 déc. 2017, 20:50

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

Une erreur de jointure que je ne comprend pas

par rononedex » 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 :)