ASP根据父ID递归得到所有子类ID的函数代码

作者:网络 来源:佚名 更新时间:2009-03-30 12:16:23 点击:

加两个字段,一个是父id,如果是顶层,父id就为0,一个是是否有下级,0元1有,一个函数就可解决,在函数中间调用本函数,找出了父层,再找他是否有下级,如果有,再找父id为本id的栏目

'==================================================
'过程名:listecityclass
'作  用:显示系统分类
'参  数:id ------ 要匹配的系统id
'==================================================
  sub listecityclass(id)
    dim f_reco,f_total,f_n,f_classid,f_classname,f_classlayer
    set f_reco=server.createobject("adodb.recordset")
    f_reco.open "select classid,classname,classlayer from ws_ecityclass where classparent=0 and classlist=0 order by classorder asc",conn,1,1
    f_total=f_reco.recordcount
    if f_total>0 then
      for f_n=1 to f_total
        format_i=1
    f_classid=f_reco(0)
    f_classname=f_reco(1)
    f_classlayer=f_reco(2)
        response.write "<option"
        if f_classlayer=0 then response.write " value=" & f_classid
        if id=f_classid then response.write " selected"
        response.write ">" & f_classname & "</option>"
        if f_classlayer=1 then call listecityclass_(id,f_classid)  '调用另一个函数,在下面
        f_reco.movenext
      next
    end if
    f_reco.close : set f_reco=nothing
  end sub
  sub listecityclass_(id,iid)
    dim f_reco,f_total,f_n,f_m,f_classid,f_classname,f_classlayer
    set f_reco=server.createobject("adodb.recordset")
    f_reco.open "select classid,classname,classlayer from ws_ecityclass where classparent="&iid&" and classlist=0 order by classorder asc",conn,1,1
    f_total=f_reco.recordcount
    if f_total>0 then
      for f_n=1 to f_total
    f_classid=f_reco(0)
    f_classname=f_reco(1)
    f_classlayer=f_reco(2)
        format_i=format_i+1
        response.write "<option"
        if f_classlayer=0 then response.write " value=" & f_classid
        if id=f_classid then response.write " selected"
        response.write ">"
        for f_m=format_i to 2 step -1
          response.write "&nbsp;&nbsp;"
          if f_m=2 then
            if f_n=f_total then response.write "└" else response.write "├"
      end if
        next
        response.write f_classname & "</option>"
        if f_classlayer=1 then call listecityclass_(id,f_classid) '调用本函数
        f_reco.movenext
        format_i=format_i-1
      next
    end if
    f_reco.close : set f_reco=nothing
  end sub