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

一、前言
       很多情况下二级分类已经不能满足需要了,而网上可用的多级分类的例子实在是不好找,故有此文。
http://bbs.blueidea.com/viewthread.php?tid=1182243
大家可以先看这个,它介绍了一种超级好的算法,反正我是看不大懂呀。

二、我们要解决的问题:
1、 分类算法常常表现为树的表示和遍历问题。那么,请问:如果用数据库中的一个Table来表达树型分类,应该有几个字段?
2、 如何快速地从这个Table恢复出一棵树;
3、 如何判断某个分类是否是另一个分类的子类;
4、 如何查找某个分类的所有产品;
5、 如何生成分类所在的路径。
6、 如何新增分类;

三、递归实现的优点与缺点
       该怎么实现多级分类呢?
       估计首先想到的都是递归,实现简单,在指定节点(就是分类,下同)下添加、修改、删除节点都不是问题,
而且节点移动实现起来也不是很难,只是要注意移动目的父节点不能是当前节点的父节节点(等于没移动),也不能是当前节点的子节点(类似于window文件夹,一个文件夹是不能移动到自己的字文件夹里的)。

数据挖掘研究院


       但是最愁人的是搜索指定节点下的东西,怎么办?也就是上面的问题3。记住,这是要包括所有子节点的,难道还去递归吗?

四、介绍下我的简单算法(是我所用的,不是我发明的)
       以常见的商品系统为例。
       4.1 表结构
              [1]分类表,T_Sort,表结构如图一所示。其中sortPath保存的是节点路径,这是个重点。
              [2]商品表,T_Product,表结构如图二所示。
[center]图一
screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor="hand"; this.alt="Click here to open new window CTRL+Mouse wheel to zoom in/out";} }" onclick="function anonymous() { if(!this.resized) {return true;} else {window.open("/Article/UploadFiles/200612/20061231083050666.gif");} }" src="http://mysheji.com/Article/UploadFiles/200612/20061231083050666.gif" onload="function anonymous() { if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt="Click here to open new window CTRL+Mouse wheel to zoom in/out";} }" border="0" />

数据挖掘研究院



图二
screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor="hand"; this.alt="Click here to open new window CTRL+Mouse wheel to zoom in/out";} }" onclick="function anonymous() { if(!this.resized) {return true;} else {window.open("/Article/UploadFiles/200612/20061231083050258.gif");} }" src="http://mysheji.com/Article/UploadFiles/200612/20061231083050258.gif" onload="function anonymous() { if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt="Click here to open new window CTRL+Mouse wheel to zoom in/out";} }" border="0" />
[/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]
图三
screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor="hand"; this.alt="Click here to open new window CTRL+Mouse wheel to zoom in/out";} }" onclick="function anonymous() { if(!this.resized) {return true;} else {window.open("/Article/UploadFiles/200612/20061231083050284.gif");} }" src="http://mysheji.com/Article/UploadFiles/200612/20061231083050284.gif" onload="function anonymous() { if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt="Click here to open new window CTRL+Mouse wheel to zoom in/out";} }" border="0" />[/center] 数据挖掘工具
       4.3 代码重点讲解。
              这里以我们要实现的功能为例讲解。
              [1]添加节点
                     <1>选择父节点,可以是根节点,或是下级所有节点(最好列出一个树型菜单让用户选择,别愁,可以实现),其实就是选择parentID。
                     <2>如果parentID=0,那么上级sortPath="0,",如果parentID<>0,那么到表T_Sort根据parentID取得上级sortPath。
                     <3>给T_Sort新增记录,sortPath=上级sortPath +新记录的sortID +","。
                     <4>范例代码见图4、图5。其中noRecord,closeRs(),showMsg(),closeConn()都是我定义的Function或Sub,它们的功能都是顾名思义的,我就不说了。注意一下,如果你用MS SQL,代码略有不同。我也很奇怪MS SQL时,addNew后,这个新的自动编号可以输出,但是和字符一连接就没有了。各位如果知道为什么,还请相告。 数据挖掘论坛

数据挖掘工具

……

数据挖掘论坛

  数据挖掘实验室

   为支持原创,其余的内容请到 http://bbs.blueidea.com/thread-1982151-1-1.html 处浏览 :) 数据挖掘工具

[数据挖掘专家] [数据挖掘研究院] [数据挖掘论坛] [数据挖掘实验室]
上一篇:asp调用orcle存储过程(过程中含有输出参数)
下一篇:无限级分类的简单算法实现及代码重点讲解
最新评论共有 0 位网友发表了评论 , 查看所有评论
发表评论( 不能超过250字,需审核,请自觉遵守互联网相关政策法规。 )
匿名?
数据挖掘网站导航 数据挖掘论坛导航
  • 数据挖掘工具
  • 数据挖掘论坛
  • DataCruncher - Cognos
  • MineSet - MathSoft
  • Intelligent Miner - GainSmarts
  • Sqlserver - SAS - Clementine
  • CART - Weka - WizSoft
  • NeuroShell - ModelQuest
  • data mining tools - Darwin
  • 数据挖掘交友
  • 数据挖掘博客
  • 数据挖掘工具
  • 数据挖掘资源
  • 数据挖掘技术算法
  • 数据挖掘相关期刊、会议
  • 研究院联盟合作专区
  • 数据挖掘基础与相关技术
  • 数据挖掘厂商与就业
  • 数据挖掘研究者乐园
  • 知名厂商数据挖掘工具资料
  • 国内数据挖掘实验室
  • Foreign Data Mining Lab
  • 热点关注
  • MDAC2.8下载!
  • 软件架构的十大错误
  • 没啥好东西了,贴一段我现在在用的产生随机
  • ASP+JS处理复杂表单的生成与验证
  • 无法加载DLL(OCI.DLL),如何解决?
  • 学习ASP有用的代码(很有用哦!)
  • 动态web开发语言项目 驳“ASP低能论”
  • 郁闷的System.Web.Mail
  • 利用ASP远程注册DLL的方法
  • 改进的ASP备份SQLServer数据库
  • 论坛最新话题
  • Foundations of Statistical Natural Langu
  • Game Theory meet Data Mining: A Recent P
  • System Building: How does it help or hin
  • 数据挖掘与Clementine培训
  • 新手报到
  • 求 SASEM 客户流失预测分析
  • 数据挖掘工程师/搜索研究院—北京——无线
  • 数据挖掘入门介绍(如何着手数据挖掘)
  • Information Overload Survey Results
  • The INEX 2005 Workshop on Element Retrie
  • 相关资讯
  • 软件架构的十大错误
  • JavaScript基础教程第四课
  • 改进的ASP备份SQLServer数据库
  • MVC构架实现之ASP
  • .net入门一些常见的东西
  • VisualStudio.NET2003不能调试ASP.Net程序
  • X.U.S.T原创:自己搭建IIS找ASP程序漏洞
  • 郁闷的System.Web.Mail
  • ASP错误代码总结
  • 从XML中读取数据!(Asp.net学习一)
  • 数据挖掘实验室资料
  • 数据挖掘博客地址
  • 数据挖掘实验室网站地址
  • Prepare for Medicare audits by using dat
  • 注册成为SAS用户与爱好者俱乐部会员
  • 水南梅
  • 明日烟
  • 新人报道
  • 下载
  • 厦门服务器托管,450元/月—0592-5177319 高
  • 买空间送域名--0592-5177319 高静