2013-11-21 53 views
0

我想实现在#1获取与多个标签和标签的追随者

“跟踪标记”功能,我已经为它下面的结构截然不同的帖子:

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 

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

我希望它的东西很简单,我很想念。 感谢

回答

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 
) 
+0

有关使用CTE,然后加入您的原始的顶部是什么? – jwimmer

+0

为什么你应该简化一些简单的事情? – Szymon

+0

还有更多,我拉着它。用户拒绝,帖子投票,回复状态。同时增加分页行数。 – jwimmer