需求说明
2张表:article,comments
文章表:article表结构:
article_id,artcile_title,content,comments
评论表:comments表结构:
comments_id,content,article_id
一篇文章对应多条评论,其中通过article_id进行对应哪些comments的记录属于哪一篇article。
现在想通过一条执行SQL,把所有article的内容和对应评论的个数读取出来,如果article无对应comments的记录说明该文章暂时无人参与评论,那么count为0.
这条SQL得怎么写?同时不至于太大性能开销。因为这里评论都放到一张表里去,可能评论数记录后续有点大。
谢谢!
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
select a.artcile_title,count(c.comments_id) from article a left join comments c on a.article_id = c.article_id group by a.artcile_title
总结一下上面两位同学
1.关联查询+索引
2.数据冗余
######上redis吧######1.article,comments关联查询+索引;
2.增加个中间模型——若comments数据量过大,可以先将其按article_id分组汇总评论个数,然后article与结果关联查询,从而避免大表关联,结构也更加平衡。
######如果comments表记录很多,可以试着这么写
select a.article_id,a.artcile_title,a.content,a.comments,c.cn
from article a left join
(select count(comments_id) as cn,article_id from comments group by article_id) c
on c.article_id = a.article_id