2011-09-27 215 views
0

假設我有三個表格:posts,tags和posts_tags。帖子將所有帖子存儲在我的博客中,標籤存儲所有不同的標籤,posts_tags存儲兩者之間的關係。例如,如果標識爲id 2的帖子標有ID爲3的標籤,posts_tags將存儲此關係。如何選擇MySQL中給定標籤的帖子的所有標籤?

我想構建一個查詢,我可以獲取標記爲給定ID的所有帖子,以及與這些帖子關聯的其他標籤。例如,我希望能夠在一個查詢中找到所有標記爲'編程'的帖子以及與該帖子關聯的所有其他標籤。

目前,我正在使用兩個查詢:一個查找標記了給定標記的帖子,一個查找這些帖子的所有標記。

有什麼辦法可以將這些查詢合併爲一個查詢嗎?

回答

3

這個查詢將返回有標籤的所有帖子:SEARCH_TAG和第二列清單,以逗號分隔的字符串,所有其他標籤(不包括您搜索的一個),適用於該職務。如果該帖子只有您要求的標籤,它將出現在列表中,但「additional_tags」列將爲NULL)。

SELECT posts.id, GROUP_CONCAT(post_tags.tag) AS additional_tags 
    FROM posts LEFT OUTER JOIN post_tags ON posts.id = post_tags.post_id 
    WHERE posts.id IN (SELECT post_id FROM post_tags WHERE tag = :search_tag) 
    AND post_tags.tag <> :search_tag 
    GROUP BY posts.id 
0

假設你的「編程」號爲1和u想要得到與標籤ID的所有帖子1

Select * from posts where tag_id in (select id from tag where id=1) 
+0

這回答,唯一的問題的第一部分,並tabdulla已經有一個查詢,確實那。訣竅是在單個查詢中回答這兩個部分。 –

+0

@Larry是的你是對的,謝謝你通知我。 – Arasu

相關問題