当前位置:编程学习 > C#/ASP.NET >>

CMS新闻类别的无限级分类以及该分类下的文章调用和统计

最近在做netCMS的二次开发,其中涉及到如题目的问题,该系统只提供了一级分类的文章数的统计和调用。数据库结构如下:

新闻分类表:



新闻列表:




问题:如何查询到一个分类下所有子分类(可能子分类下还有分类)的新闻?

查了一些资料,貌似要用到递归调用,请大虾们帮忙解决下,感激不尽~~,100分送上! --------------------编程问答-------------------- 子父关系
主键 栏目名称  父ID
1    a         null
2    b         1
3    c         1
4    d         3

…………………
懂? --------------------编程问答--------------------
引用 1 楼 fengyarongaa 的回复:
子父关系
主键 栏目名称 父ID
1 a null
2 b 1
3 c 1
4 d 3

…………………
懂?


不懂,希望详细点解释~~ --------------------编程问答-------------------- 也就是说三个字段 就把 你这些问题全部解决了

每行数据都有主键  一个主键是一个栏目  不管是子级还是父级

默认后面的第三个字段 父ID为空
父ID为空就是没有父亲   没有老爸 那你就是老爸了  你就是 父栏目
如果父ID不为空  那么他就是 父ID所对应栏目 的下一级 
……   一次类推
懂?   --------------------编程问答-------------------- 多级分类查询
http://topic.csdn.net/u/20100510/17/0c48e26c-25a2-41ba-87d8-c78ebad9fc97.html --------------------编程问答--------------------
引用 4 楼 wuyq11 的回复:
多级分类查询
http://topic.csdn.net/u/20100510/17/0c48e26c-25a2-41ba-87d8-c78ebad9fc97.html

+1   这个够详细了    lz   多搜搜   就懂了 --------------------编程问答-------------------- 仔细研究下就OK了。 --------------------编程问答-------------------- 这个就看你的分类表是如何设计的了。

如果分类表里面有“父节点ID路径”的字段那就好办了。

比如

ParentIDPath

1
1,2
1,2,3
1,2,3,4

那么我用,ParentIDPath like '1,2,%'就可以找到他的所有子分类。

================

也可以是这样

ParentIDPath

01
0102
010203
01020304

那么我用,ParentIDPath like '0102%'就可以找到他的所有子分类。
--------------------编程问答--------------------
引用 7 楼 jyk 的回复:
这个就看你的分类表是如何设计的了。

如果分类表里面有“父节点ID路径”的字段那就好办了。

比如

ParentIDPath

1
1,2
1,2,3
1,2,3,4

那么我用,ParentIDPath like '1,2,%'就可以找到他的所有子分类。

================

也可以是这样

ParentIDPath

01
0102……


这个方法确实不错,很好懂,可惜数据库不是这样设计的。 --------------------编程问答-------------------- 父子 或者父子+兄弟 --------------------编程问答-------------------- WITH T AS
(
  SELECT classID ,parentID , className
  FROM TB
  WHERE classID = 你要查的classID
  UNION ALL
  SELECT A.classID, A.parentID , A.className
  FROM TB AS A JOIN T AS B ON A.PID = B.ID
)
SELECT * FROM T ORDER BY ID
--------------------编程问答-------------------- --------------------编程问答-------------------- 我是10楼,上一个有字段忘记改名字了

WITH T AS
(
  SELECT classID ,parentID , className
  FROM TB
  WHERE classID = 你要查的classID
  UNION ALL
  SELECT A.classID, A.parentID , A.className
  FROM TB AS A JOIN T AS B ON A.parentID = B.classID 
)
SELECT * FROM T ORDER BY classID  --------------------编程问答-------------------- sed
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,