MySql — получить строки на основе совпадающих идентификаторов

У меня проблема со следующим шагом в моем запросе, мой разум полностью рисует здесь пробел … У меня есть 3 таблицы MySql.

Первая таблица называется post и имеет столбец id (есть другие столбцы, но они не актуальны)

Id    Title
----  --------
1      A
2      B

Вторая таблица называется followPost (публикуется как пользователи), и в ней есть столбец id, столбец userid и столбец postid.

Id    userid    postid
----  --------  -------------------
1     1         2
3     2         1

Третья таблица называется postTags (теги для записей), и в ней есть столбец id, столбец postid и столбец tagid.

Id    postid      tagid
----  --------    --------
1     2           1
2     1           1

Получить посты пользователей, которые я сделал со следующими

SELECT *
FROM followingPost
INNER JOIN posts ON posts.id = followingPost.postid
WHERE userid = 14

И затем Получить пользователям понравившиеся сообщения с идентификаторами тегов, что я сделал со следующими

SELECT *
FROM followingPost
INNER JOIN posts ON posts.id = followingPost.postid
INNER JOIN postTags ON posts.id = postTags.postid
WHERE userid = 14

Нет, я пытаюсь взять теги поста, которые понравились пользователю, и получить все посты с одинаковым идентификатором тега.

Это то, что я ожидаю:

    Id    Title
----  --------
2      B

Я ожидаю этого, потому что пользователь 1 любит сообщение 2, а сообщение 2 имеет тег 1 и то же самое делает сообщение 1, поэтому я ожидаю вернуть сообщение 1

Любые идеи о том, как сделать последний шаг?

Я действительно надеюсь, что это имеет смысл, пожалуйста, дайте мне знать, если вам нужно, чтобы я что-то прояснил.

0

Решение

select * from posts
left join postTags on posts.id = postTags.postid
where postTags.tagid in
(SELECT postTags.tagid
FROM followingPost
INNER JOIN posts ON posts.id = followingPost.postid
INNER JOIN postTags ON posts.id = postTags.postid
WHERE userid = 14)
and posts.id not in
(SELECT posts.id
FROM followingPost
INNER JOIN posts ON posts.id = followingPost.postid
INNER JOIN postTags ON posts.id = postTags.postid
WHERE userid = 14)
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector