我想统计各个顶级分类下新闻条数。类型的层级不固定。
表结构如下
NewsType {id,int
name,varchar
parentId int default 0
}
News { id int
title varchar
newsTypeId
}
请问大神们 怎么查啊。。。
select count(1),title from News group by newsTypeId 只能查所有的分类啊。。。我要顶级分类,总数量。
你的NewsType数据表结构设计有问题,所以这儿就悲催了。
如果有这样的查询需求的话,你在设计NewsType的时候就要多用点心。
要不然就得先用代码找出所有顶级ID及下属所有ID,一句SQL就搞不定了。
如果你的NewsType设计合理的话,就可以一句SQL搞定。
想通了,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
@爱编程的大叔: 感谢大神
@五百万: 我是大叔,不是大婶。
采用CTE,递归查询每个顶级分类下的数据,然后再group取count
先做成一个视图,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 后面挂了一坨,有了上面的视图,应该可以得到你想要的