【问题标题】:How to select all tags for a post with a given tag in MySQL?如何在 MySQL 中为具有给定标签的帖子选择所有标签?
【发布时间】:2011-09-27 15:49:07
【问题描述】:

假设我有三个表:posts、tags 和 posts_tags。 Posts 存储我博客中的所有帖子,tags 存储所有不同的标签,posts_tags 存储两者之间的关系。例如,如果 id 为 2 的帖子被标记为 id 为 3 的标签,posts_tags 将存储这种关系。

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

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

有没有办法将这些查询组合成一个查询?

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    此查询将返回所有具有标签 :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
    

    【讨论】:

      【解决方案2】:

      假设您的“编程” id 是 1,并且您想获取标签 id 为 1 的所有帖子

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

      【讨论】:

      • 这仅回答了问题的第一部分,并且 tabdulla 已经有一个查询可以做到这一点。诀窍是在一个查询中回答这两个部分。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多