如何在MySQL中为具有给定标记的帖子选择所有标签?

时间:2011-09-27 15:49:08

标签: mysql sql

假设我有三个表:posts,tags和posts_tags。帖子存储我博客中的所有帖子,标签存储所有不同的标签,posts_tags存储两者之间的关系。例如,如果id为2的帖子标记了ID为3的标签,则posts_tags会存储此关系。

我想构建一个查询,我可以在其中获取标记有给定ID的所有帖子,以及与这些帖子关联的其他标签。例如,我希望能够在一个查询中找到所有标记为“编程”的帖子以及与该帖子关联的所有其他标签。

目前,我使用两个查询:一个用于查找标记有给定标记的帖子,另一个用于查找这些帖子的所有标记。

有没有办法将这些查询合并到一个查询中?

2 个答案:

答案 0 :(得分:4)

此查询将返回所有包含标记的帖子: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

答案 1 :(得分:0)

假设您的“编程”ID为1,并且您希望获得标签ID为1的所有帖子

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