我正在努力实施"关注标记" Stackoverflow中的功能
我有以下结构:
POSTS TABLE
----------
POSTS_ID
POSTS_TAGS (XML COMMA SEPARATED LIST)
POSTTAGS TABLE
------------
POSTTAGS_ID
POSTTAGS_TAGS_ID
POSTTAGS_POSTS_ID
TAGS TABLE
----------
TAGS_ID
TAGS_NAME
TAGFOLLOW
----------
TAGFOLLOW_ID
TAGFOLLOW_USERS_ID
TAGFOLLOW_TAGS_ID
TAGFOLLOW_APP_ID
我认为查询将是:
SELECT *
FROM POSTS P
JOIN POSTTAGS PT ON PT.POSTTAGS_POST_ID = P.POSTS_ID
JOIN TAGFOLLOW F ON F.TAGFOLLOW_TAGS_ID = PT.POSTTAGS_TAGS_ID
WHERE F.TAGFOLLOW_USERS_ID = 12236
如何获得独特的帖子? 我尝试了不同的功能,但还没有运气。 上面的查询返回带有用户订阅的标记的帖子记录。因此,当用户订阅帖子上的多个标签时,查询会返回许多重复的记录。
我希望它缺少一些简单的东西。 感谢
答案 0 :(得分:2)
您只能退回POSTS
中的列并使用DISTINCT
SELECT DISTINCT P.POSTS_ID, P.POSTS_TAGS
FROM POSTS P
JOIN POSTTAGS PT ON PT.POSTTAGS_POST_ID = P.POSTS_ID
JOIN TAGFOLLOW F ON F.TAGFOLLOW_TAGS_ID = PT.POSTTAGS_TAGS_ID
WHERE F.TAGFOLLOW_USERS_ID = 12236
或者,您可以使用IN
SELECT P.POSTS_ID, P.POSTS_TAGS
FROM POSTS P
WHERE P.POSTS_ID IN
(
SELECT PT.POSTTAGS_POST_ID FROM POSTTAGS PT
JOIN TAGFOLLOW F ON F.TAGFOLLOW_TAGS_ID = PT.POSTTAGS_TAGS_ID
WHERE F.TAGFOLLOW_USERS_ID = 12236
)