У меня возникла проблема с следующим шагом моего запроса, мой разум полностью растягивает пробел здесь... У меня есть 3 таблицы MySql.
Первая таблица называется post и имеет столбец идентификатора (есть и другие столбцы, но они не имеют значения)
Id Title
---- --------
1 A
2 B
Вторая таблица называется nextPost (такие пользователи сообщений), и она имеет столбец идентификатора, столбец userid и столбец столбца
Id userid postid
---- -------- -------------------
1 1 2
3 2 1
Третья таблица называется postTags (тегами для сообщений), и в ней есть столбец идентификатора, столбца 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
Любые идеи о том, как выполнить последний шаг?
Я действительно надеюсь, что это имеет смысл, пожалуйста, дайте мне знать, если вам нужно, чтобы я что-то прояснил.
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)