2013-11-21 81 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