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

Bonsoir,
Je viens de construire mon objet qui affiche mes articles en page d'accueil via un foreach :
[code]
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]);
}
[/code]
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]
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
[/code]
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 :)