|
现在我们回头看看第四个问题:怎样得到某个分类下的所有产品。由于采用了位编码,现在问题变得很简单。我们很容易推算:某个产品属于某个类别的条件是 Product.FatherID&(Catalog.ID的特征码)=Catalog.ID。其中"&"代表位与算法。这在SQL Server中是直接支持的。
举例来说:产品所属的类别为:1092787200,而当前类别为1092780032。当前类别对应的特征值为:4294950912,由于1092787200&4294950912=8537400,所以这个产品属于分类8537400。
我们前面已经给出了计算特征码的公式。特征码并不多,而且很容易计算,可以考虑在Global.asa中Application_OnStart时间触发时计算出来,存放在Application("Mark")数组中。 当然,有了特征码,我们还可以得到更加有效率的算法。我们知道,虽然我们采用了位编码,实际上还是一种顺序编码的方法。表现出第I级的分类编码肯定比第I+ 1级分类的编码要小。根据这个特点,我们还可以由FID得到两个特征码,其中一个是本级位特征码FID0,一个是上级位特征码FID1。而产品属于某个分 类FID的充分必要条件是: Product.FatherID>FID0 and Product.FatherID<FID1 下面的程序显示分类FID下的所有产品。由于数据表Product已经对FatherID进行索引,故查询速度极快:
<% REM oConn---数据库连接,已经打开 REM FID---当前分类 REM FIDMark---特征值数组,典型的情况下为Application("Mark") REM k---数组元素个数,也是分类的级数 Sub GetAllProduct(oConn,FID,FIDMark byref,k) REM 根据FID计算出特征值FID0,FID1 for i=k to 1 if (FID and FIDMark = FID ) then exit next strSQL = "select Name from Product where FatherID>"FIDMark(i)&" and FatherID<"FIDMark(i-1) set rsProduct=oConn.Execute(strSQL)%> <UL><% Do While Not rsProduct.Eof%> <LI><%=rsProduct("Name") Loop%> </UL><% rsProduct.Close End Sub %>
关于第5个问题、第6个问题,就留作习题吧。有了上面的位编码,一切都应该迎刃而解。 感谢 21DIV 开发组供稿,本文版权(电子版及文字版)都归 21DIV 所有 其它站点转载请自行联系 21DIV 请支持原创站点
这是天极论坛的树型解决方案,是坛主烈云写的。
sub MainList()显示主题帖 ON ERROR RESUME NEXT set rs=Server.CreateObject("ADODB.Recordset") sql="select * from "&bbs_id&" where lanp_level=1 order by lanp_subdate DESC" rs.Open sql,conn,1,1 Set rs= conn.Execute("bbs_level1 "&bbs_id&"") if not rs.eof then rs.pagesize=15 rs.AbsolutePage =1 if Request("page")<>"" then rs.AbsolutePage =Request("page") RowCount =rs.pagesize session("pageccu")=rs.pagecount Response.Write "<ul>" For i= 0 To 15 If rs.eof Then exit for Do While Not rs.Eof and RowCount>0 Response.Write "<li class=tds>" If rs("bbs_zt")="1" Then Response.Write "<img src=img/jh.gif> " Else if rs("lanp_icon")<>"" then Response.Write "<img src=images/" &rs("lanp_icon")&".gif> " End If Response.Write "<a href=disp.asp?uid="&nowid&"&lanp_id="&rs("lanp_id")&"&bbsid="&Request("bbsid")&">"&Replace(rs("lanp_title")," "," ")&"</a>" if rs("lanp_size")=0 then Response.Write "(空)" else Response.Write "("&rs("lanp_size")&"字)" end if lanu_nickn=rs("lanu_nickn") Response.Write "(<a href=userinfo.asp?uid=lan122545&target="&lanu_nickn&" target=_b>"&lanu_nickn&"</a> " Response.Write "<font size=1>"&rs("lanp_date")&"" &"</font>" Response.Write "<font color=226699> 阅读:"&rs("lanp_reads") &")</font>" If DateDiff( "d",rs("lanp_date"),DateAdd("d",-1,Now()))<0 Then Response.Write "<img src=images/new.gif width=31 height=12>" End If Response.Write "</li>" If rs("lanp_reply")<>"" And rs("lanp_reply")<>"0" Then SubList rs("lanp_reply"),rs("lanp_id") ccc=0 End If Response.Write "<hr style=height:1pt>" RowCount=RowCount-1 rs.MoveNext Next Loop Response.Write "</ul>" Response.Write("分页显示"&dd) 分页: [1] [2] [3] [4] [5] [6] [7] [8] [9] (编辑:网站学习网)
|