Comment joindre 5 tables sql
Barhamada
Messages postés
7
Statut
Membre
-
o_edo1 Messages postés 35 Statut Membre -
o_edo1 Messages postés 35 Statut Membre -
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:
Cette requete me renvois le bon username mais pas les bons nombres de likes, dislike et comments.
Quelqu'un a une idée ? Merci
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
A voir également:
- Comment joindre 5 tables sql
- Tables des matières word - Guide
- Joindre pdf - Guide
- Debrider jbl flip 5 ✓ - Forum Audio
- Glary utilities 5 - Télécharger - Nettoyage
- Tableau de combinaison loto 5/90 - Forum Logiciels
5 réponses
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
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
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.
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"}
{"id":"12", "msg":"Salut o_edo1", "date":"31/10/2014","username":"Barhamada","likes":"4", "dislike":"1", "comments":"5"}
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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