@MelancholicTheDie
PHP Developer

Вложенный SQl запрос, как правильно составить?

Доброго времени суток.

Задача:
Получить количество лайков и подписок через один запрос.
Подписки и лайки хранятся в отношении многие к многим.

Сделал отдельные запросы, которые получают кол-во лайков и подписок отдельно.
Для лайков получилось так:
select count(user_idea_likes.idea_id) as likes from `articles` inner join `user_article_likes` on `user_article_likes`.`article_id` = `articles`.`id` group by `articles`.`id`;

Для подписок получилось так:
select count(subscribed_user_articles.article_id) as subscribed from `articles` inner join `subscribed_user_articles` on `subscribed_user_articles`.`article_id` = `articles`.`id` group by `articles`.`id`;

Из всего этого хочу получить всего лишь один запрос с выводом:
Article
- кол-во лайков
- кол-во подписок
(ну и так на каждой статье)

Какие есть идеи? Мысли? Куда смотреть и что почитать?
  • Вопрос задан
  • 1795 просмотров
Решения вопроса 1
@d-stream
Готовые решения - не подаю, но...
Идея на поиграться:
select 
article_id,
count(distinct user_article_likes.article_id),
count(distinct subscribed_user_articles.article_id)
from articles
left join  лайки
left join подписки
group by article
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@BorisKorobkov Куратор тега MySQL
Web developer
Двумя отдельными проще.
Только надо упростить.
Если для одной статьи, то:
SELECT COUNT(*) FROM user_idea_likes WHERE article_id = ...

Если для всех, то:
SELECT article_id, COUNT(*) FROM user_idea_likes GROUP BY article_id
Ответ написан
denman1985
@denman1985
SQL, Oracle Forms/Reports dbd
А просто объединить не пробовали?
Использовал left join для полноты данных.
SELECT `articles`.`id`, count(user_idea_likes.idea_id) AS likes,  
count(subscribed_user_articles.article_id) AS subscribed 
FROM `articles` 
LEFT JOIN `user_article_likes` ON `user_article_likes`.`article_id` = `articles`.`id` 
LEFT JOIN `subscribed_user_articles` ON `subscribed_user_articles`.`article_id` = `articles`.`id`
GROUP BY `articles`.`id`
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы