考虑一个标准化的多对多标记系统(三个文章表、标记、tag_map)。我想要获得带有相关文章的标签列表;例如
Tag Article_IDs
tag1 1,5,7
tag2 3,4,5,7,8
.....我应该如何JOIN这些表来生成这个列表?
简单地计算tag_map WHERE tag='something‘中的行数的简单方法。糟糕的是,对于这个方法,我们需要为每个标记单独查询。例如,要生成一个包含20个标签的列表,我们需要20个查询(这是不合理的)。我希望用JOIN来做一个查询。
发布于 2011-12-15 20:25:41
你可以用group_concat聚合函数来实现这一点。它们是stackoverflow中的大量样本。
SELECT tag.id,
GROUP_CONCAT(post.post_id)
FROM
posts
inner join
post_tag on ...
inner join
tags on ...
GROUP BY tag.id;发布于 2011-12-15 20:24:34
这样的东西应该可以工作(但这只是Oracle,我不知道其他数据库上的wm_concat()的等价物):
select t.tagname, wm_concat(m.articleid) from tags t, tag_map m where t.id = m.tagid group by t.tagname;发布于 2011-12-15 20:26:56
Select t.Tag, Group_Concat(a.Article_ID)
From tag_map tm
Join tag t on tm.tag_id = t.tag_id
Join articles a on tm.article_id = a.article_id
Group By t.Taghttps://stackoverflow.com/questions/8520043
复制相似问题