2011-09-27 106 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

相关问题