#mysql #sql
#mysql #sql
Вопрос:
Я пытаюсь выбрать Posts
с помощью ассоциированных номеров Comments
и Likes
.
Это мой запрос
SELECT `waller_posts`.*,
COUNT(waller_comments.id) AS num_comments,
COUNT(waller_likes.id) AS num_likes
FROM `waller_posts`
LEFT JOIN `waller_comments` ON `waller_comments`.`post_id` = `waller_posts`.`id`
LEFT JOIN `waller_likes` ON `waller_likes`.`post_id` = `waller_posts`.`id`
WHERE `wall_id` = 1
AND `wall_type` = "User"
GROUP BY `waller_posts`.`id`
Когда я добавляю второй left join
в этом случае likes
, результаты num_comments
и num_likes
получаются неверными. Как я могу выполнить такой запрос?
Ответ №1:
Запрос создается, чтобы предоставить вам все возможные комбинации комментариев и лайков к сообщению.
Вероятно, проще всего просто использовать COUNT (DISTINCT …) :-
SELECT `waller_posts`.*,
COUNT(DISTINCT waller_comments.id) AS num_comments,
COUNT(DISTINCT waller_likes.id) AS num_likes
FROM `waller_posts`
LEFT JOIN `waller_comments` ON `waller_comments`.`post_id` = `waller_posts`.`id`
LEFT JOIN `waller_likes` ON `waller_likes`.`post_id` = `waller_posts`.`id`
WHERE `wall_id` = 1
AND `wall_type` = "User"
GROUP BY `waller_posts`.`id`
Обратите внимание, что ваш запрос основан на функции MySQL, но это может привести к ошибке в большинстве вариантов SQL. Для большинства вариантов SQL вам необходимо перечислить ВСЕ неагрегированные столбцы в предложении GROUP BY .
Комментарии:
1. Похоже, это работает!! Я только что попробовал свой редактор sql, дайте мне пару минут, чтобы протестировать его, спасибо !! 🙂
Ответ №2:
Используйте Distinct
предложение, потому что оно будет отображать комбинацию данных таблицы like и comment
SELECT `waller_posts`.*,
COUNT(DISTINCT waller_comments.id) AS num_comments,
COUNT(DISTINCT waller_likes.id) AS num_likes
FROM `waller_posts`
LEFT JOIN `waller_comments` ON `waller_comments`.`post_id` = `waller_posts`.`id`
LEFT JOIN `waller_likes` ON `waller_likes`.`post_id` = `waller_posts`.`id`
WHERE `wall_id` = 1
AND `wall_type` = "User"
GROUP BY `waller_posts`.`id`
Комментарии:
1. Поймите мой ответ, если какой-либо запрос даст мне знать. Я объясняю это.
2. Спасибо, Садихсан, очень любезно, но я даже попробовал, как вы сказали, но результат в точности совпадает с моим запросом.