分类的方法
来源:互联网 发布:淘宝网店转让靠谱吗 编辑:程序博客网 时间:2024/04/30 05:52
我的分类的心得. 本文所写的方法,适合中小型数据库的分类,对于分类的级数和个数并没有限制.但是随着分类的增多,对于缓存的占用会加大.当然,几十个甚至上百个分类应该还是承受的了的.这对于中小型网站来说够了.所谓具体问题具体分析了.
最近在写网上商店,分类的方法想了很久.有一种从书上看来的方法是用位编码.假设用32位的整数来编码,一级分类占4位,后面四级每级7位.这样一级可以有24 =16个分类,后面四级每级有27 =128个分类.它这样分的目的在于以下两个问题:
1.如何快速地知道某个类别是否属于另一个类别的子类
2.如何快速地知道某个类别下的所有商品
采用的它的"位与算法"来实现.
但我自己并不是很清楚这种方法.对于其中的程序也没有时间细看了.因为工作比较紧,以后再说了.最终我还是采用了父子类别的分类方法.配合设置多几个字段,可以实现上面的两个问题.再配合application缓存的应用,可以少占用些查询时间和资源.(注:application缓存的方法是从动网论坛的代码里学过来的.)
在网上查到了一种搜索类别路径的方法,及查找所有子类别的方法.这两种方法都是用到了循环嵌套查询,对于它的优化,我选择了使用设置多几个字段来减少查询的次数.具体实现方法为:
数据库字段设置:ID,ParentID,ParentPath,Depth,Child,Name.其中ParentPath是从一级分类到当前分类的父分类的ID的依次排列.Depth为当前类别的深度.定义一级分类的深度为1.Child是当前分类中子分类(不包括孙及以下分类)的个数.目前我还没有用到Child这个属性,不过以后可能会用到.
如果要实现较方便的操作,一定要配合application缓存.这样一些变量就不用再从数据库读取了,大大的节省了时间.
Cache中包括了每一个类别的上述信息,这在编辑类别时尤为重要,可以很方便的更改所属类别等.
对于目录树的实现,我在网上找到了一种用js实现的的下拉菜单目录树.只要给定ID,ParentID,Name就可以了.非常的好用.真是省了我一个大麻烦.具体方法另外再写一篇.
要注意的几点:
1.缓存在更新数据库之后一定要更新,否则会出错.可以针对不同类别只更新其本身及父类的缓存.
2.由于根类是不存在的,一个虚拟的root,所以对于一级分类的相关属性要注意其合理性.例如,它的父类是ROOT,ParentID=0,ParentPath=0这和二级分类相对于一级分类的情况有相似也有不同处.所以需要分情况讨论.
3.对于ParentPath,我目前是用","来分隔每个ParentID,这样做的好处是,在使用查看当前类别的Path的时候,SQL查询中,只要使用 SELECT ... FROM ... WHERE ID IN (....) 这样的语句就可以了.而在确认其有效性的时候,记得要在首尾加上分隔符","例如判断一个ID是否在某类的ParentPath中等.无论何时,都用InStr(","&ParentPath&"," , ","&ID&",")>0 来判断,否则可能出现1,11,111这种分不清的状况.虽说错误很简单,但却是易忽略的东东.
- 分类的方法
- 设计方法的分类
- JAVA方法的分类
- 方法的分类:
- 分类的线性方法
- 常见的分类方法
- 五金模具的分类及其分类方法
- 用xsl分类的方法
- SVM多分类的方法
- 测井的方法和分类
- 分类信息推广的方法
- SVM多分类的方法
- 插补方法的分类
- 分类的线性回归方法
- lec2 图像分类的方法
- 通用无限分类的方法
- 无限极分类的方法
- 分类模型的评估方法
- 日记
- HTTP协议
- [ZT]Windows管道技术简述
- [ZT]如何在图形界面中实时捕获控制台程序的标准输出,让图形界面程序向控制台程序输入特定的命令行指令
- 我的BLOG彻底搬家了 新BLOG地址:http://www.uisoft.net
- 分类的方法
- 新的征程即将开始
- 使用Visual Basic .net 2003 编写摄像头控制程序
- Visual Basic6.0中varptr以及strptr在Visual Basic .net 2003中的实现
- 爱情的两岸
- 系统分析员,让我头痛
- [转贴]汉语是最了不起的语言(是中国人就看)
- 使用List Ctrl (一)(原文见codeproject)
- [收藏]LINUX/UNIX 相关资源 ,便于查找和学习 [不断更新]