新微赢技术网

标题: [挑战高手]在有父子关系数据库中找出某位的所有子级记录 [打印本页]

作者: 风化雪夜    时间: 2010-1-14 02:16
标题: [挑战高手]在有父子关系数据库中找出某位的所有子级记录
一个数据库"ABS.mdb"中有一个数据表"QAC",有下列字段和记录:
 ID   ID1    ID2   姓名  电话
100249  100021  100021
100366  100021  100021
102132  100021  100366
101151  100021  100021
103031  101151  101151
102002  100021  100366
102312  102002  102002
101024  100021  100021
105011  101151  103209
103426  101151  103031
104408  101151  103426
102818  100021  101024
103513  100021  101024
103328  103513  103513
102022  100021  103031
103209  101151  103031
110302  101151  103426
109329  101151  103031
110038  101151  103031
103304  101151  101151
120034  101151  103304
ID2是编号为ID的父级编号
问题:给出一个编号,要找出他下面7级以内的所有的子孙级记录,如何用ASP编程实现?
数据量比较大,至少万级的,一定要考虑运行速度的问题。
作者: ╰☆惢棂擱淺    时间: 2010-1-14 02:16
一次性全部查询出来?
什么数据库?
作者: づ嗳嘚亽鈊↑    时间: 2010-1-14 02:16
用的是ACCESS数据库,希望帮提供完整的代码,谢谢。
同时能提供用MYSQL数据库的代码,将感激不尽。
作者: 听雨飞扬    时间: 2010-1-14 02:16
找到一个
无限级分类
比较简单的一个页面,类似csdn论坛在ns下的左边列表
描述:
1.
数据名:tree.mdb
表名:tree
表结构:id(自编) pid(数字) content(文本) link(文本)
2.
图片:endnode.gif collapsed.gif back.gif(均在img目录下,可自行修改)
3.
代码:
<!--#include file="conn.inc"-->
<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<META NAME="GENERATOR" Content="Microsoft FrontPage 4.0">
<TITLE>无限级列表</TITLE>
<!--
by fason(2003-5-12)
-->
<style>
.node{
font-size:12px;
padding:0 0 2 0;
margin-left:10;
height:22px;
}
img{
vertical-align:middle;
width:11px;
height:11px;
}
a{text-decoration:none;font-size:12px;color:black}
.deeptree{
width:100%;
height:100%;
backgound-color:#f2f2f2;
overflow:auto;
}
</style>
</HEAD>
<BODY bgcolor=#f2f2f2>
<nobr>
<div class="deeptree">
<%
newid=Request.QueryString("id")
if newid="" or CInt(newid)<0 then newid=0
if isNumeric(newid) then
listTree(CInt(newid))
end if
function listTree(id)
dim rs
dim imgFolder,imgFile
dim link,href,parentHref
dim target,ahref,click
target="main" ’所指定的框架名
imgFolder="img/" ’默认路径
set rs=conn.execute("select *,(select count(*) from tree where pid = T.id) as children,(select pid from tree where id="&id&") as parent from tree T where pid="&id)
if not rs.eof then
parentHref=Request.ServerVariables("URL")&"?id="&rs("parent")
if id<>0 then Response.Write "<div class=’node’ nowrap=true><a href=’"&parentHref&"’ onfocus=’blur()’><img src="/Files/BeyondPic/chinazcj/2005-11/19/05111900471259510.gif"’ border=0></a> <a href=’"&parentHref&"’>上一级目录</a></div>"&VbCrLf
do while not rs.eof
if rs("children")>0 then
img=imgFolder+"collapsed.gif"
href=Request.ServerVariables("URL")&"?id="&rs("id")
click="onclick=""location.href=’"&href&"’"""
else
img=imgFolder+"endnode.gif"
href="javascript:void(0)"
end if
if not isNull(rs("link")) then
ahref=rs("link")
else
ahref="javascript:void(0)"
target="_self"
end if
link="<a href=’"&ahref&"’ target=’"&target&"’ title=’"&rs("content")&"’ "&click&">"&rs("content")&"</a>"
Response.Write "<div class=’node’ nowrap=true><a href=’"&href&"’ onfocus=’blur()’><img src=’"&img&"’ border=0></a> "&link&"</div>"
rs.movenext
loop
rs.close:set rs=nothing
end if
end function
conn.close:set conn=nothing
%>
</div>
</nobr>
</BODY>
</HTML>

conn.inc:
<%
dim conn
set conn = Server.CreateObject("ADODB.Connection")
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.mappath("tree.mdb") & ";Persist Security Info=False"
%>
4.测试:ie6,ns7,mozilla下测试通过
作者: FIFA2007    时间: 2010-1-14 02:16
你大概说说你的目的是什么吗?做什么东西?
作者: 丑剑客    时间: 2010-1-14 02:16
谢谢楼上两位的回复,dzt0001朋友的正在学习中。
回griefforyou版主:比如用于某企业对经销商、分销商、销售点的管理,其中就要用到1楼所提到的问题,要用网页的形式实现,输入一个编号,要找出他下面7级以内的所有的子孙级记录,找到以后分页显示结果。
作者: 千年@之恋    时间: 2010-1-14 02:16
strid=request.form("id")
set rs=conn.execute("select id1,id2 from qac where id2 = strid")
作者: 释放压力    时间: 2010-1-14 02:16
7楼的只能找到第一层子记录,每个第一层子记录下还有子记录,以此类推
请大家参看http://3112.uuclubs.com/blog/555080192/32744.htm,在数据库中存储层次数据,如何找出某个节点下面的所有层次的节点,用ASP编程,用网页显示结果。
作者: 依依    时间: 2010-1-14 02:16
在4楼的代码中,下面这行没看明白,请帮忙解释一下,谢谢!
set rs=conn.execute("select *,(select count(*) from tree where pid = T.id) as children,(select pid from tree where id="&id&") as parent from tree T where pid="&id)
作者: ぱホ    时间: 2010-1-14 02:16
再也没人帮?
作者: 日月明    时间: 2010-2-6 09:05
不要见一个爱一个,爱的太多,你的爱就要贬值。




欢迎光临 新微赢技术网 (http://bbs.weiying.cn/) Powered by Discuz! X3.2