现有两个表,
1、Article_Category:
CatgoryID,CategoryName,CategoryParentID
数据如下:
1          0             程序设计
2          1             C#
3          1             Delphi
4          2             C#语法介绍
5          2             C#功能介绍
6,0,新闻
2、Article:
ArticleID,CategoryID,ArticleTitle,ArticleCreateDate
1         4          C#语法介绍二   2008-1-5
2         5          C#功能介绍     2008-1-4
3         6          新闻标题一     2008-1-3
4         4          C#语法介绍一   2008-1-2
其中Article.CategoryID=Article_Category.CategoryID,Aritlce_Category是递归数结构,从CategoryParentID=0开始递归CategoryID=CategoryParenID
如何根据Article.ArticleCreateDate进行排序查询出程序设计(Article_Category.CatgoryID=1)的所有子节点的内容
格式如下:
Article.ArticleID,Article_Category.CategoryID,Article_Category.CategoryName,Article.ArticleTitle,Article.ArticleCreateDate
1                 4                               C#语法介绍                   C#语法介绍二           2008-1-5
2                 5                               C#功能介绍                      C#功能介绍             2008-1-4
4                 4                               C#语法介绍                      C#语法介绍一           2008-1-2
使用SQL语句,存储过程,函数都可以,只要能实现

解决方案 »

  1.   

    select a.ArticleID, ac.CategoryID,ac.CategoryName,a.ArticleTitle, ArticleCreateDate from Article_Category ac
    inner join Article a on ac.CatgoryID = a.CategoryID where ac.CatgoryID = 1 order by ArticleCreateDate DESC
    ---------------------
    CatgoryID = 1? 这部就是说是Article_Category的第一个记录, 但是第一个记录是没有Article记录的.... 
     
      

  2.   

    哥哥,咱提问艺术点中不
    你的数据库是怎么组织的,有没有定义什么主键啊外键什么的,再说你这一大片的字母看着都费劲。
    试试楼上说的create view
      

  3.   

    --测试数据
    CREATE TABLE tb(ID char(3),PID char(3),Name nvarchar(10))
    INSERT tb SELECT '001',NULL ,'山东省'
    UNION ALL SELECT '002','001','烟台市'
    UNION ALL SELECT '004','002','招远市'
    UNION ALL SELECT '003','001','青岛市'
    UNION ALL SELECT '005',NULL ,'四会市'
    UNION ALL SELECT '006','005','清远市'
    UNION ALL SELECT '007','006','小分市'
    GO--查询指定节点及其所有子节点的函数
    CREATE FUNCTION f_Cid(@ID char(3))
    RETURNS @t_Level TABLE(ID char(3),Level int)
    AS
    BEGIN
    DECLARE @Level int
    SET @Level=1
    INSERT @t_Level SELECT @ID,@Level
    WHILE @@ROWCOUNT>0
    BEGIN
    SET @Level=@Level+1
    INSERT @t_Level SELECT a.ID,@Level
    FROM tb a,@t_Level b
    WHERE a.PID=b.ID
    AND b.Level=@Level-1
    END
    RETURN
    END
    GO--调用函数查询002及其所有子节点
    SELECT a.*
    FROM tb a,f_Cid('002') b
    WHERE a.ID=b.ID
    /*--结果
    ID   PID  Name       
    ------ ------- ---------- 
    002  001  烟台市
    004  002  招远市
    --*/给个例子吧,郁闷了