@hbrmdc

Postgres: как построить такой запрос?

Postgres 9.5

4 таблицы:
Articles
Topics
Relations (columns: fk article_id, fk topic_id[, id etc...])
Favorite (columns: fk 'article_id', fk 'article_name', fk owner etc...)

Каждая статья (Article) может быть связана с несколькими темами (Topic) посредством таблицы Relations.
Пользователь добавляет, скажем, 1000 статей в избранное (Favorite). Как мне достать только те статьи можно из таблицы, которые были добавлены этим пользователем в избранное (Favorite) и имеют связь с одной конкретной темой (Topic)?

Прошу прощения, за такой заголовок вопроса - понятия не имею, как его назвать. Если вы знаете - напишите коммент - я переименую.
  • Вопрос задан
  • 187 просмотров
Пригласить эксперта
Ответы на вопрос 2
axaxa_man
@axaxa_man
web developer
Допустим мы знаем owner.id, и знаем topic.id,
тогда запрос будет выглядеть следующим образом (нет достаточных знаний sql, чтобы это организовать гармоничнее, но делал бы что-то такое):

SELECT * FROM ARTICLES
WHERE ARTICLES.ID = (
      SELECT ID FROM FAVORITE 
      WHERE 
            FAVORITE.OWNER.ID = "YOUR_OWNER_ID" 
            AND EXIST (
               SELECT * FROM RELATIONS 
               WHERE FAVORITE.ID = RELATIONS.ID 
               AND RELATIONS.TOPIC_ID = "YOUR_TOPIC_ID
          )
     )
Ответ написан
Комментировать
@SharuPoNemnogu
не язык плохой, программисты такие...
SELECT a.*
FROM articles a
INNER JOIN favourite f ON f.article_id = a.id
INNER JOIN relations r ON r.article_id = a.id
WHERE f.owner = :owner_id
      AND r.topic_id = :topic_id
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы