获取具有多个标记和标记关注者的不同帖子

时间:2013-11-21 23:05:16

标签: sql sql-server database

我正在努力实施"关注标记" 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

如何获得独特的帖子? 我尝试了不同的功能,但还没有运气。 上面的查询返回带有用户订阅的标记的帖子记录。因此,当用户订阅帖子上的多个标签时,查询会返回许多重复的记录。

我希望它缺少一些简单的东西。 感谢

1 个答案:

答案 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
)