dmitrydeco
@dmitrydeco

Как составить зарос к MySQL?

Здравствуйте. Имеется структура: посты, авторы, и промежуточная таблица (id, post_id, author_id).
Как составить запрос на выборку постов, в которых есть, к примеру, 3 определённых автора под id 1,2,3?
SELECT * FROM posts p
LEFT JOIN post_author pa ON p.id = pa.post_id
LEFT JOIN authors a ON a.id = pa.author_id
WHERE ...?
  • Вопрос задан
  • 108 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Если любой из этих авторов
SELECT `post_id` FROM `posts` WHERE `author_id` IN (:id1, :id2, :id3)

Если все три, то
SELECT `p1`.`post_id`
  FROM `posts` AS `p1` 
  JOIN `posts` AS `p2` 
    ON `p2`.`post_id` = `p1`.`post_id` AND `p2`.`author_id` = :id2
  JOIN `posts` AS `p3` 
    ON `p3`.`post_id` = `p1`.`post_id` AND `p3`.`author_id` = :id3
  WHERE `p1`.`author_id` = :id1

И уберите из таблицы `id`, сделайте первичным ключом пару (`post_id`, `author_id`)
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
kimono
@kimono
Web developer
Можно попробовать так:
select a.* from posts a
inner join (
select *, count (*) as cnt from post_author
where author_id in (1,2,3)
group by podt_id
having cnt = 3
) b on a.id = b.post_id
Ответ написан
Комментировать
@egormmm
Борітеся — поборете!
SELECT * FROM post p
WHERE p.id IN (SELECT post_id FROM post_author WHERE author_id IN (1,2,3))
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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