У меня проблема со следующим шагом в моем запросе, мой разум полностью рисует здесь пробел … У меня есть 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
Любые идеи о том, как сделать последний шаг?
Я действительно надеюсь, что это имеет смысл, пожалуйста, дайте мне знать, если вам нужно, чтобы я что-то прояснил.
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)
Других решений пока нет …