首 页 | 新 闻 | 技术中心 | 第二书店 | 《程序员》 | 《开发高手》 | 社 区 | 黄 页 | 人 才
移 动专 题SUNIBM微 软微 创精 华Donews人 邮
我的技术中心 
我的分类 我的文档
全部文章 发表文章
专栏管理 使用说明



 RSS 订阅 
最新文档列表
Windows/.NET
.NET  (rss)    
Visual C++  (rss)    
Delphi  (rss)    
Visual Basic  (rss)    
ASP  (rss)    
JavaScript  (rss)    
Java/Linux
Java  (rss)    
Perl  (rss)    
综合
其他开发语言  (rss)    
文件格式  (rss)    
企业开发
游戏开发  (rss)    
网站制作技术  (rss)    
数据库
数据库开发  (rss)    
软件工程
其他  (rss)    

积极原创作者 
tellmenow (22)
cutemouse (22)
softj (78)
iiprogram (69)
qdzx2008 (50)
goodboy1881 (14)
wangchinaking (58)
fancyhf (1)
harrymeng (41)
yjz0065 (113)
CSDN - 文档中心 - ASP 阅读:4394   评论: 1    参与评论
标题   无限级目录数据库结构与方法一例     选择自 goaler 的 Blog
关键字   无限级目录数据库结构与方法一例
出处  

Folder 表:
Folderid:目录ID,自动编号
FolderParentID:上级目录ID,Int
FolderName:目录名称,Varchar
FolderDescription:目录说明,Varchar

File 表:
FileID:文档ID,自动编号
FileFolderID:所属目录ID,Int
FileName:文档名称,Varchar
FileDescription:文档内容,Varchar或备注(ntext)

function GetAllChildID(id)
    '取得FolderID为id的目录下所有子目录的FolderID,以半角逗号分开
    dim arrID
    arrID = id
    Set rsdir = Conn.Execute("Select FolderID,FolderParentID from [Folder] where FolderParentID = " & id & "")
    if rsdir.eof and rsdir.bof then
        set rsdir = nothing
        GetAllChildID = arrID
        exit function
    else
        while not rsdir.eof
            arrID = arrID & "," & GetAllChildID(rsdir("FolderID"))
        rsdir.movenext
        wend
    end if
    set rsdir = nothing
    GetAllChildID = arrID
end function


'从表File中取得某个目录下所有文档的Sql
dim AllChildID
AllChildID = GetAllChildID(5)    '取得FolderID为5下所有目录的FolderID
AllfileSql = "Select FileID,FileName from [File] where FileFolderID in ("& AllChildID &")"
?

function FolderPath(id)
    '得到一个目录的完整路径
    dim Pathstr,NewPathstr
    Set rsdir = Conn.Execute("Select FolderID,FolderName,FolderParentID from [Folder] where FolderID = " & id)
    if rsdir.bof and rsdir.eof then
        Pathstr = ""
    else
        Pathstr = "<a href=""Folder.asp?FolderID=" & rsdir("FolderID") &""">" & rsdir("FolderName") & "</a> > " & Pathstr
        if rsdir("FolderParentID") <> 0 then
            Pathstr = FolderPath(rsdir("FolderParentID")) & Pathstr
        end if
    end if

    NewPathstr = Pathstr
    set rsdir = nothing
    FolderPath = NewPathstr
end function

dim folderpathstr
folderpathstr = FolderPath(67)
response.write folderpathstr '输出 (技术文档 > Web开发 > ASP > Code Sample > 表单 > )


相关文章
对该文的评论
duduwolf ( 2005-01-16)
这样太慢了,应该放一个顶级id和树深度,这样查询起来只要让结果集按一种特殊的方式排列即可一次查询取出所有子项,或者用数据库自带的存储过程或函数实现。