现在用的是文章标签三张表设计:posts,tags,relationships,但有一个问题是:
在一个页面内列出N篇文章的信息和对应的标签,我的做法是
1、根据指定条件先从POSTS表中取出N篇文章的信息
2、再根据1中得到的POSTID从TAGS中关联取出对应标签
那么就是列出N篇文章,为了得到每篇文章对应的标签就要再执行N次数据查询
这个算是问题吗?大家如何做的?
现在用的是文章标签三张表设计:posts,tags,relationships,但有一个问题是:
在一个页面内列出N篇文章的信息和对应的标签,我的做法是
1、根据指定条件先从POSTS表中取出N篇文章的信息
2、再根据1中得到的POSTID从TAGS中关联取出对应标签
那么就是列出N篇文章,为了得到每篇文章对应的标签就要再执行N次数据查询
这个算是问题吗?大家如何做的?
是的,你最好连续两次left join relations表和tags表来减少sql语句的数量
from语句这么写
from posts as p left join relations as r on r.pid = p.id left join tags as t on t.id = r.tid
@Chris Yue
如果每篇文章对应有N个标签,那么两次join后对于结果集中文章表的重复数据如何过滤?用GROUP BY + GROUP_CONCAT()的方式吗?还是在程序中对结果集用循环处理?
文章1, 标签N
文章1, 标签N
文章1, 标签N
文章2, 标签N
文章2, 标签N
文章2, 标签N
……
文章N, 标签N
文章N, 标签N
文章N, 标签N
如何将上面的结果集变成下面这样:
文章1, 标签N, 标签……, 标签N
文章2, 标签N, 标签……, 标签N
……
文章N, 标签N, 标签……, 标签N
仅仅是为了获取标签吗?
做个标签表, 标签数据全部缓存
post中加一taglist, 为关联的标签id逗号间隔
获取时分别从缓存中取就行了
这个方案复杂点的就是标签的增改了, 不过也没大难度
如果要获取标签关联的post列表, 可以一样的在tag表中加一个postlist字段
最好还是post中加一个字段名字叫tag,当对文章标签增删改查的时候更新tag字段,tag字段存放tag id和name的二维数组的序列化或者json。这样每次取的时候直接解析tag字段就行了。
5 回答3.3k 阅读✓ 已解决
2 回答2.9k 阅读✓ 已解决
1 回答2.4k 阅读✓ 已解决
1 回答3k 阅读✓ 已解决
1 回答2k 阅读✓ 已解决
3 回答2.3k 阅读
1 回答2.3k 阅读
你想得到的是:
1、文章列表
2、文章列表中,每篇文章对应的tags
我建议你通过3条SQL来完成:
1、获得文章列表
2、获得文章tags id
建议存入post_id => tag_ids数组,如
3、将用到的tag存入数组
得到id=>tag
如
4、遍历文章列表,并根据tags列表,对tags进行输出
最后: