假设我有三个表:posts,tags和posts_tags。帖子存储我博客中的所有帖子,标签存储所有不同的标签,posts_tags存储两者之间的关系。例如,如果id为2的帖子标记了ID为3的标签,则posts_tags会存储此关系。
我想构建一个查询,我可以在其中获取标记有给定ID的所有帖子,以及与这些帖子关联的其他标签。例如,我希望能够在一个查询中找到所有标记为“编程”的帖子以及与该帖子关联的所有其他标签。
目前,我使用两个查询:一个用于查找标记有给定标记的帖子,另一个用于查找这些帖子的所有标记。
有没有办法将这些查询合并到一个查询中?
答案 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)