无限级分类的简单算法实现及代码重点讲解.docVIP

无限级分类的简单算法实现及代码重点讲解.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
无限级分类的简单算法实现及代码重点讲解

无限级分类的简单算法实现及代码重点讲解一、前言 很多情况下二级分类已经不能满足需要了,而网上可用的多级分类的例子实在是不好找,故有此文。 大家可以先看这个,它介绍了一种超级好的算法。 二、我们要解决的问题: 1、 分类算法常常表现为树的表示和遍历问题。那么,请问:如果用数据库中的一个Table来表达树型分类,应该有几个字段? 2、 如何快速地从这个Table恢复出一棵树; 3、 如何判断某个分类是否是另一个分类的子类; 4、 如何查找某个分类的所有产品; 5、 如何生成分类所在的路径。 6、 如何新增分类; 三、递归实现的优点与缺点 该怎么实现多级分类呢? 估计首先想到的都是递归,实现简单,在指定节点(就是分类,下同)下添加、修改、删除节点都不是问题, 而且节点移动实现起来也不是很难,只是要注意移动目的父节点不能是当前节点的父节节点(等于没移动),也不能是当前节点的子节点(类似于window文件夹,一个文件夹是不能移动到自己的字文件夹里的)。 但是最愁人的是搜索指定节点下的东西,怎么办?也就是上面的问题3。记住,这是要包括所有子节点的,难道还去递归吗? 四、介绍下我的简单算法(是我所用的,不是我发明的) 以常见的商品系统为例。 4.1 表结构 [1]分类表,T_Sort,表结构如图一所示。其中sortPath保存的是节点路径,这是个重点。 [2]商品表,T_Product,表结构如图二所示。 [center]图一 图二 [/center] 4.2 算法简要说明 [1]parentID保存的自然是节点的父节点,如果一个节点的parentID=0时,认为它是一级分类。 [2]一个节点的sortPath为它的父节点的sortPath+自己的sortID+ ,。如sortID=32的节点的父节点是节点21,节点21的sortPath是0,21,,那么节点32的sortPath就是0,21,32,。有点绕,看图三清楚啦。可能你想不通为啥最后要多个逗号啊,后面你就明白啦。所有节点的sortPath的左边两位都是0,,因为它们都在根节点下。一个节点的sortPath一定包含在它的子节点的sortPath中。 [center] 图三 [/center] 4.3 代码重点讲解。 这里以我们要实现的功能为例讲解。 [1]添加节点 1选择父节点,可以是根节点,或是下级所有节点(最好列出一个树型菜单让用户选择,别愁,可以实现),其实就是选择parentID。 2如果parentID=0,那么上级sortPath=0,,如果parentID0,那么到表T_Sort根据parentID取得上级sortPath。 3给T_Sort新增记录,sortPath=上级sortPath +新记录的sortID +,。 4范例代码见图4、图5。其中noRecord,closeRs(),showMsg(),closeConn()都是我定义的Function或Sub,它们的功能都是顾名思义的,我就不说了。注意一下,如果你用MS SQL,代码略有不同。我也很奇怪MS SQL时,addNew后,这个新的自动编号可以输出,但是和字符一连接就没有了。各位如果知道为什么,还请相告。 [center] 图四 图五 [/center] [2]修改节点 节点的属性只有一个名字而已,直接update就可以了,就不说了。 [3]删除节点 1选择节点 2如果parentID=0,报错,根节点不能删除。 3删除该节点及所有子节点。你可能想是不是很麻烦啊,哈哈,其实我只用了一个SQL语句就搞定啦。 CODE: (Access)sql=delete from T_Sort where Instr(sortPath,’,parentID,’)0 CODE: (MS SQL)sql=delete from T_Sort where CHARINDEX(’,parentID,’,sortPath)0 本算法的精华就在这里啦,仔细想想吧,sortPath最后那个逗号的作用也在这里啦。 4删除上述所有节点下的商品。同上,表名不同而已。 CODE: (Access)sql=delete from T_Product where Instr(sortPath,’,parentID,’)0 CODE: (MS SQL)sql=delete from T_Product where CHARINDEX(’,parentID,’,sortPath)0 5范例代码见图6。MS SQL的代码就不贴了。 [center] 图六 [/center] [4]移动节点 难点哦,睁大眼睛仔细看。 1选择要移动的节点parentID,选择目的节点toParentID(

文档评论(0)

wnqwwy20 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:7014141164000003

1亿VIP精品文档

相关文档