Как оставить несколько ссылок на несколько таблиц в mysql?

У меня проблема с объединением трех таблиц в mysql.

скажем, у нас есть таблица с именем posts которой я храню свои записи, у меня есть таблица с именем likes которой я храню user_id и post_id, а третья таблица с именем comments которой я храню текст user_id и post_id и комментарий.

Мне нужен запрос, который извлекает список моих записей, количество понравившихся и комментариев для каждой записи.

Im используя этот запрос:

 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 

но есть проблема с этим запросом, если комментарии пусты для элемента, нравится счет, это нормально, но позволяет сказать, что если в записи есть 2 комментария и 4 понравятся, то total_comments и total_likes будут «8», что означает, что mysql умножает их. Я в замешательстве, и я не знаю, что мне делать.

Спасибо в advace.

Используйте count(distinct comments.id) и count(distinct likes.id) , если эти идентификаторы уникальны.

Ну, это один из способов приблизиться к нему (предполагая, что mysql допускает производные таблицы):

 SELECT posts.id, comments.total_comments, likes.total_likes FROM `posts` LEFT OUTER JOIN (select post_id, count(id) as total_comments from comments) comments ON comments.post_id = posts.id LEFT OUTER JOIN (select post_id, count(id) as total_likes from likes) likes ON likes.post_id = posts.id 

Вы также можете использовать коррелированные подзапросы. Вы можете потребовать, чтобы в статусе дела учитывался ввод в 0, когда нет согласованных записей.

Попробуем коррелированный подзапрос:

 SELECT posts.id, (select count(Id) from comments where post_id = posts.id) as total_comments, (select count(Id) from likes where post_id = posts.id) as total_likes FROM `posts`