网络编程
位置:首页>> 网络编程>> Asp编程>> asp分类算法要解决的问题(3)

asp分类算法要解决的问题(3)

  发布时间:2009-09-10 16:49:00 

标签:分类,树,算法

如何查找某个分类的所有产品;

现在来解决我们在前面提出的第四个问题。第三个问题留作习题。我们假设产品的数据表如下定义:

Create Table Product(

[ID] [int] NOT NULL,

[Name] [nvchar] NOT NULL,

[FatherID] [int] NOT NULL

);

其中,ID是产品的编号,Name是产品的名称,而FatherID是产品所属的分类。

对第四个问题,很容易想到的办法是:先找到这个分类FID的所有子类,然后查询所有子类下的所有产品。实现这个算法实际上很复杂。代码大致如下:

<%

Function GetAllID(oConn,FID)

Dim strTemp


If FID=-1 then

strTemp = ""

else

strTemp =","

end if


strSQL = "select Name from catalog where FatherID="&FID

set rsCatalog = oConn.Execute(strSQL)

Do while not rsCatalog.Eof 

strTemp=strTemp&rsCatalog("ID")&GetAllID(oConn,Catalog("ID")) REM 递归调用

Loop

rsCatalog.Close


GetAllID = strTemp

End Function


REM strConn--连接数据库的字符串,请根据情况修改

set oConn = Server.CreateObject("ADODB.Connection")

oConn.Open strConn


FID = Request.QueryString("FID")


strSQL = "select top 100 * from Product where FatherID in ("&GetAllID(oConn,FID)&")"

set rsProduct=oConn.Execute(strSQL)

%>

<UL><%

Do while not rsProduct.EOF

%>

<LI><%=rsProduct("Name")%>

<% 

Loop

%>

</UL>

<%rsProduct.Close

oConn.Close 

%>

这个算法有很多缺点。试列举几个如下:

1、 由于我们需要查询FID下的所有分类,当分类非常多时,算法将非常地不经济,而且,由于要构造一个很大的strSQL,试想如果有1000个分类,这个strSQL将很大,能否执行就是一个问题。

2、 我们知道,在SQL中使用In子句的效率是非常低的。这个算法不可避免地要使用In子句,效率很低。

我发现80%以上的程序员钟爱这样的算法,并在很多系统中大量地使用。细心的程序员会发现他们写出了很慢的程序,但苦于找不到原因。他们反复地检查SQL的执行效率,提高机器的档次,但效率的增加很少。

最根本的问题就出在这个算法本身。算法定了,能够再优化的机会就不多了。我们下面来介绍一种算法,效率将是上面算法的10倍以上。

0
投稿

猜你喜欢

  • 1.不要放过任何一个看上去很简单的小编程问题——他们往往并不那么简单,或者可以引伸出很多知识点;2.会用asp,并不说明你会asp;3.看a
  • 微软建议用Request.BinaryRead()读取表单数据,但由于这种方法读出的是二进制数据,需要对读出的数据逐字节进行分析,生成有意义
  • 前言:书终于完稿了,我也有了一些自己的时间,于是决定将书中讲到的一些比较常见的知识点整理出来,发在Blog里面。当然也不会完全发表出来,毕竟
  • 昨天有人在群里问图1的边框效果是否能实现。 边框效果图有人给出答案,需要嵌套一个元素实现。我当时粗粗写了个测试页面,但是时间太晚了,也没有细
  • 看一看自己写的类是否能符合这样的标准.要成为高手,我要走的路还很长.摘抄自《OOD 启示录》--Arthur J.Riel(1)所有数据都应
  •  代码如下:--Begin Index(索引) 分析优化的相关 Sql -- 返回当前数据库所有碎片率大于25%的索引 -- 运行
  • 这段时间,关于asp的前途,关于asp的好坏的讨论贴,都有好些了。当然,大家的心都是好的,但是一些朋友说的话,真是让人郁闷。个人觉得,在现在
  • 扪心自问,你真正了解你卖给用户的是什么玩意么?你所认为革命性的,一定会震惊世界的功能、特色,用户真的买单么?我的意思是,我们总是习惯性的忘记
  • 感觉这个东西很常用,很多其它js框架里有,但是太大了,用不了太多,自己写了个。需要的朋友可以参考下。下面是html测试代码:<!DOC
  • 通过《SQL Server 数据库备份和还原认识和总结(一)》,相信您对数据备份和还原有了一个更深入的认识,在上文中我没有对事务日志做剖析,
  •  代码如下:Set Catalog_object= Server.CreateObject("ADO
  • 如何做一个可以让人家申请使用的计数器?    好了,我们来做一个与页面分离的计数器,是文本型的啦。这也很简单,
  • MySQL目前不支持列的Default 为函数的形式,如达到你某列的默认值为当前更新日期与时间的功能,你可以使用TIMESTAMP列类型下面
  • Windows Server 2003系统是现在很流行的服务器操作系统,许多网站都用它来做。但是如何保证服务器的相对安全,这个只要进行一些简
  • 关于书写习惯,遵循曾经总结过的风格标准,现在一点都没有变。并且近来翻看高手作品,横向连排似乎在大产品项目中逐渐成为主流,个人认为如此维护效率
  • dictionary对象和数组有点相似,但无需用redim来改变dictionary的大小,dictionary也没有多维,dictiona
  • 近来有客户要求用table显示一大串数据,由于滚动后就看不到表头,很不方便,所以想到这个效果。上次做table排序对table有了一些了解,
  • 一、两层结构的ASP应用有何缺点 在Browser/Server 应用程序开发领域,微软公司的IIS/ASP以其强大的功能,良好的扩展能力,
  • 这是网站制作很流行的下拉列表两级连动的代码,也是很多人使用的代码。下面,先来看这段代码:<%dim countset&nbs
  • 为了能够正常使用,先把所提供的global.asa文件放到该应用程序的根目录中。最简单的办法是把global.asa文件放到缺省Web网站的
手机版 网络编程 asp之家 www.aspxhome.com