假设我有三个表: posts、tags和posts_tags。帖子存储我博客中的所有帖子,标签存储所有不同的标签,而posts_tags存储两者之间的关系。例如,如果id为2的帖子使用id为3的标签进行标记,则posts_tags将存储此关系。
我想构造一个查询,在这个查询中,我可以获得用给定id标记的所有帖子,以及与这些帖子相关联的其他标签。例如,我希望能够在一个查询中找到所有带有“编程”标签的帖子以及与该帖子关联的所有其他标签。
目前,我使用两个查询:一个用于查找带有给定标签的帖子,另一个用于查找这些帖子的所有标签。
有没有办法把这些查询合并成一个查询呢?
发布于 2011-09-27 15:52:22
此查询将返回具有标记:search_tag的所有帖子,第二列以逗号分隔的字符串列出适用于该帖子的所有其他标记(不包括您搜索的标记)。如果帖子只有您请求的标签,它将出现在列表中,但"additional_tags“列将为空)。
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
发布于 2011-09-27 15:56:10
假设你的"programming“id是1,你想得到所有标签id为1的帖子
Select * from posts where tag_id in (select id from tag where id=1)
https://stackoverflow.com/questions/7571988
复制