首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在规范化数据库中连接tag_map

如何在规范化数据库中连接tag_map
EN

Stack Overflow用户
提问于 2011-12-15 20:19:46
回答 3查看 105关注 0票数 0

考虑一个标准化的多对多标记系统(三个文章表、标记、tag_map)。我想要获得带有相关文章的标签列表;例如

代码语言:javascript
运行
复制
Tag    Article_IDs
tag1   1,5,7
tag2   3,4,5,7,8
.....

我应该如何JOIN这些表来生成这个列表?

简单地计算tag_map WHERE tag='something‘中的行数的简单方法。糟糕的是,对于这个方法,我们需要为每个标记单独查询。例如,要生成一个包含20个标签的列表,我们需要20个查询(这是不合理的)。我希望用JOIN来做一个查询。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-15 20:25:41

你可以用group_concat聚合函数来实现这一点。它们是stackoverflow中的大量样本。

代码语言:javascript
运行
复制
SELECT tag.id,
 GROUP_CONCAT(post.post_id)
 FROM 
  posts 
  inner join 
  post_tag on ...
  inner join 
  tags on ...
 GROUP BY tag.id;
票数 2
EN

Stack Overflow用户

发布于 2011-12-15 20:24:34

这样的东西应该可以工作(但这只是Oracle,我不知道其他数据库上的wm_concat()的等价物):

代码语言:javascript
运行
复制
select t.tagname, wm_concat(m.articleid) from tags t, tag_map m where t.id = m.tagid group by t.tagname;
票数 1
EN

Stack Overflow用户

发布于 2011-12-15 20:26:56

代码语言:javascript
运行
复制
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.Tag
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8520043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档