Comment joindre 5 tables sql

Fermé
Barhamada Messages postés 7 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 31 octobre 2014 - Modifié par Barhamada le 31/10/2014 à 02:28
o_edo1 Messages postés 28 Date d'inscription lundi 20 octobre 2014 Statut Membre Dernière intervention 11 juillet 2015 - 31 oct. 2014 à 05:06
Bonjour,

Je suis débutant en php et je me retrouve face a un probleme de jointure entre 5 tables.

Voici mes tables:

post(id,msg,date,id_user)
users(id,username,password)
likes(id,id_user,id_post)
dislike(id,id_user,id_post)
comments(id,msg,id_user,id_post)

Je voudrais afficher les posts avec pour chacun: le username, le nombre de likes, dislike et comments.

Voici ma requete:
SELECT post.id,post.msg,post.date,users.username,count(likes.id) AS likes,count(dislike.id) AS dislikes,count(comments.id) AS comments
FROM post
INNER JOIN users ON users.id=post.user_id
INNER JOIN likes ON likes.id_post=post.id
INNER JOIN dislike ON dislike.id_post=post.id
INNER JOIN comments ON comments.id_post=post.id
Group BY post.id


Cette requete me renvois le bon username mais pas les bons nombres de likes, dislike et comments.

Quelqu'un a une idée ? Merci

5 réponses

Bonjour Barhamada

je vais essayer de faire la requête mais elle sera certainement longue.
A+
1
Barhamada Messages postés 7 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 31 octobre 2014 1
31 oct. 2014 à 03:41
Ok Delphine j'attends alors.
1
Coucou Barhamada

j'arrive à faire la somme totale de fois où apparaît un user (post + likes + dislikes+ comment)
Mais séparément, je ne pense pas que se soit possible

Sinon il faut faire une requête pour chaque table

j'ai vu que vous êtes trompé dans votre requête
INNER JOIN users ON users.id=post.user_id
çà devrait être
INNER JOIN users ON users.id=post.id_user
0
o_edo1 Messages postés 28 Date d'inscription lundi 20 octobre 2014 Statut Membre Dernière intervention 11 juillet 2015 20
31 oct. 2014 à 03:07
Tu problème est un poblème de SQL et non de php ;-) Fait séparément plusieurs requêtes (au lieu de une seule comme tu as fais), à chaque fois avec une seule jointure, à savoir post-user, post-like, post-dislike et post-comment. Donc 4 requêtes au total.
0
Barhamada Messages postés 7 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 31 octobre 2014 1
31 oct. 2014 à 03:17
Salut o_edo1 et merci pour ta réponse. Cependant faire 4 requetes serai trop lourd parce je développe une application android. Je dois ainsi recupérér un tableau cohérant dont chaque ligne devra contenir par exemple:
{"id":"12", "msg":"Salut o_edo1", "date":"31/10/2014","username":"Barhamada","likes":"4", "dislike":"1", "comments":"5"}
0

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

Posez votre question
o_edo1 Messages postés 28 Date d'inscription lundi 20 octobre 2014 Statut Membre Dernière intervention 11 juillet 2015 20
Modifié par o_edo1 le 31/10/2014 à 05:19
Essaye ça et dis-moi si ça marche :

SELECT POST.id, USERS.username, SUM(nb_likes), SUM(nb_comments), SUM(nb_dislikes)
FROM
(
select id_post, 1 as nb_likes, 0 as nb_comments, 0 as nb_dislikes from LIKES
union
select id_post, 0 as nb_likes, 1 as nb_comments, 0 as nb_dislikes from COMMENTS
union
select id_post, 0 as nb_likes, 0 as nb_comments, 1 as nb_dislikes from DISLIKE
), USERS, POST
WHERE USERS.id = POST.id_user
GROUP by id_post
0