news(新闻表)(id主键)
id    title
1    中国新闻
2    日本新闻
3    美国新闻comment(评论表)(aid为new表的关键字段)
aid comment
1    中国新闻的评论1
1    中国新闻的评论2
3    美国新闻的评论1
3    美国新闻的评论2
3    美国新闻的评论3//本来想把在news表当中添加一个commentNums(评论次数字段),在每添加一个评论的时候,就把news表当中对应的id的评论次数加1,但想一下这样好像不合理,又没有时间分析像一些大的架构的cms的表结构,所以请教大家一般的大型
的cms或者网站的设计结构是哪样的啊?如果是我像下面那样的话,请高手把sql 语句帮忙写出来,谢谢了
//要求查询news表当中的新闻,按照评论次数的多少降序显示出来,并把评论次数也显示出来,如下
标题                              评论次数
美国新闻                            3
中国新闻                            2
日本新闻                            0

解决方案 »

  1.   

    select title,num from news a,(select aid,count(commnet) as num from comment ) as b where a.id=b.aid;
      

  2.   

    select 
      a.title as 标题,
      isnull(b.cnt,0) as 评论次数
    from
      news a
    left join
      (select aid,count(1) as cnt from comment group by aid) b
    on
      a.id=b.aid
      

  3.   

    谢谢楼上二位的回答了,我想问一下,一般的cms的评论信息和新闻表的的架构是这样的吗?这样
    查询select title,num from news a,(select aid,count(commnet) as num from comment ) as b where a.id=b.aid;
    或者:
    select 
      a.title as 标题,
      isnull(b.cnt,0) as 评论次数
    from
      news a
    left join
      (select aid,count(1) as cnt from comment group by aid) b
    on
      a.id=b.aid
    会不会很慢啊?
      

  4.   

    如果aid上有索引,则速度不会太慢。MySQL会先执行 select aid,count(1) as cnt from comment group by aid ,由于有索引MySQL根本不需要访问表的数据文件,仅访问索引文件就行了。然后以这个结果集到news表通过id的索引找对应的项。应该没有问题。当然如果直接在news表中加上这么个统计字段会更快。
      

  5.   


    谢谢您的回答了您说:如果aid上有索引,仅访问索引文件就行了
    如果这样的话一般的cms为什么还要分表处理把新闻内容的标题和内容用两表保存呢?
    如果给id建立个索引的话,不是不要分表了吗?算法还简单,不好意思不要笑话,我对这方面比较差.