首页 新闻 搜索 专区 学院

SQL统计-统计各个顶级分类下新闻条数。请大神指教

0
悬赏园豆:40 [已解决问题] 解决于 2014-11-03 21:13

我想统计各个顶级分类下新闻条数。类型的层级不固定。

表结构如下

NewsType   {id,int

                   name,varchar

                   parentId int  default 0

}

News {   id int

              title  varchar

              newsTypeId     

}

请问大神们 怎么查啊。。。

   select count(1),title from News group by  newsTypeId     只能查所有的分类啊。。。我要顶级分类,总数量。

五百万的主页 五百万 | 初学一级 | 园豆:97
提问于:2014-10-28 12:06
< >
分享
最佳答案
0

你的NewsType数据表结构设计有问题,所以这儿就悲催了。

如果有这样的查询需求的话,你在设计NewsType的时候就要多用点心。

要不然就得先用代码找出所有顶级ID及下属所有ID,一句SQL就搞不定了。

如果你的NewsType设计合理的话,就可以一句SQL搞定。

 

收获园豆:40
爱编程的大叔 | 高人七级 |园豆:30813 | 2014-10-28 12:14

 想通了,SQL语句如下。(注:需要SQL 2005以上)

WITH CTE_Demo

(

  Select id, id as FirstLevelID, name as FirstLevelName from NewsType where ParentID=0

      UNION ALL

  Select M.id, n.FirstLevelID, n.FirstLevelName from NewsType M

  inner join CTE_Demo N

  on M.ParentID=N.id

)

Select count(X.id), Y.FirstLevelName from News X

inner join CTE_Demo Y 

on X.newsTypeID=Y.id

group by Y.FirstLevelName

 

爱编程的大叔 | 园豆:30813 (高人七级) | 2014-10-28 17:22

@爱编程的大叔: 感谢大神

五百万 | 园豆:97 (初学一级) | 2014-11-03 21:13

@五百万: 我是大叔,不是大婶。

爱编程的大叔 | 园豆:30813 (高人七级) | 2014-11-03 21:21
其他回答(2)
0

采用CTE,递归查询每个顶级分类下的数据,然后再group取count

幻天芒 | 园豆:36914 (高人七级) | 2014-10-28 12:27
0

先做成一个视图,select * from News left  join NewsType   on News.newsTypeId=NewsType.ID

SELECT     * FROM        视图 AS A LEFT OUTER JOIN
                      视图 AS B ON B.rec_no = A.father_no

 

select count(1),title from table(上面那个视图)where  parentId=??

 这里面不知道你的顶级分类是不是 parentId 1、2、3、4 后面挂了一坨,有了上面的视图,应该可以得到你想要的

风醉 | 园豆:1197 (小虾三级) | 2014-10-28 15:48
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册