您好,匿名用户
随意问技术百科期待您的加入

关于文章标签CURD的数据库设计

0 投票

现在用的是文章标签三张表设计:posts,tags,relationships,但有一个问题是:
在一个页面内列出N篇文章的信息和对应的标签,我的做法是
1、根据指定条件先从POSTS表中取出N篇文章的信息
2、再根据1中得到的POSTID从TAGS中关联取出对应标签
那么就是列出N篇文章,为了得到每篇文章对应的标签就要再执行N次数据查询
这个算是问题吗?大家如何做的?

用户头像 提问 2012年 12月1日 @ Leo 上等兵 (255 威望)
分享到:

1个回答

0 投票
 
最佳答案

你想得到的是:

1、文章列表
2、文章列表中,每篇文章对应的tags

我建议你通过3条SQL来完成:

1、获得文章列表

SELECT * FROM `posts`

2、获得文章tags id

SELECT `post_id`,`tag_id` FROM `relationships` WHERE `post_id` IN (...)

建议存入post_id => tag_ids数组,如

$post_tags = array(
  1=>array(1,2,3),
  2=>array(2,3,5),
);

3、将用到的tag存入数组

SELECT `id`,`tag` FROM `tags` WHERE `id` IN (...)

得到id=>tag

$tags = array(
  1=>'火车',
  2=>'飞机',
);

4、遍历文章列表,并根据tags列表,对tags进行输出
最后:

诸如tags表,建议采用keyvalue数据库进行存储,如memcached、tokyo cabinet、redis等
诸如relationships表,建议复制一份到posts表,以text 1,2,3,4这样的形式存储。relationships表主要用于根据tag对文章进行检索用
用户头像 回复 2012年 12月1日 @ Tristana 上等兵 (285 威望)
选中 2012年 12月1日 @Leo
提一个问题:

相关问题

+1 投票
1 回复 50 阅读
用户头像 提问 2012年 12月1日 @ Renekton 上等兵 (260 威望)
0 投票
1 回复 38 阅读
用户头像 提问 2012年 12月1日 @ Sejuani 上等兵 (427 威望)
+2 投票
1 回复 125 阅读
0 投票
1 回复 23 阅读
用户头像 提问 2012年 12月1日 @ Morgana 上等兵 (251 威望)
0 投票
1 回复 36 阅读
用户头像 提问 2012年 12月1日 @ Wukong 上等兵 (475 威望)

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...