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

0

У меня возникла проблема с следующим шагом моего запроса, мой разум полностью растягивает пробел здесь... У меня есть 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

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

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

  • 1
    Пожалуйста, добавьте несколько примеров данных, которые будут содержаться в таблице, и ожидаемый результат, который вы хотите. При желании добавьте полученные данные, которые не являются желаемыми.
  • 0
    Это что лучше?
Теги:

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) 
  • 0
    Это возвращает правильные результаты, но пост 1 (заголовок A) появляется в результатах, я не хочу включать пост, который пользователь уже любит.
  • 0
    см обновленный ответ

Ещё вопросы

Сообщество Overcoder
Наверх
Меню