Comment joindre 5 tables sql

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

  1. 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
    1. 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
    2. Bonjour Barhamada

      je vais essayer de faire la requête mais elle sera certainement longue.
      A+
      1. 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"}
        1. 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.