i have a problem with joining three tables in mysql.
lets say we have a table named posts which I keep my entries in it, i have a table named likes which i store user_id’s and post_id’s in and a third table named comments which i store user_id’s and post_id’s and comment’s text in it.
I need a query that fetches list of my entries, with number of likes and comments for each entry.
Im using this query:
SELECT posts.id, count(comments.id) as total_comments, count(likes.id) as total_likes
FROM `posts`
LEFT OUTER JOIN comments ON comments.post_id = posts.id
LEFT OUTER JOIN likes ON likes.post_id = posts.id
GROUP BY posts.id
but there is a problem with this query, if comments are empty for an item, likes count is just ok, but lets say if an entry has 2 comments and 4 likes, both total_comments and total_likes will be “8”, meaning that mysql multiplies them.
I’m confused and I dont know what whould I do.
Thanks in advace.
Use
count(distinct comments.id)andcount(distinct likes.id), provided these ids are unique.