首页 | 新闻 | 交流 | 问吧 | 文档 | 手册 | 下载 | 博客

收藏此问题 发表新评论

基于左右值的无限分类思想

平常我们分类的是这样的
id(自然增长ID)
pid(父分类ID)

先查询出所有的分类,然后递归,计算层数,这种方法的缺点就是分类多的时侯,递归比较慢

另外一种在MYSQL官方网站上有推荐的一种方法就是基于左右值的

每增加一个分类,都有一个左值,一个右值
比如添加一个分类program
那么他的左值 右值就分别设定为 1 program 2
再在下面添加两个分类php,HTML就是
1 program 6
2 php 3     4 HTML 5

这里有详细的说明(虽然文字我们看不懂,但是代码和图示还是能看的 ^_^)
http://weblabor.hu/cikkek/hierarchikusadatkezeles2


这样做有什么好处?为什么这样做?
我们来看一下获取图示中的PHP这个分类的所有子分类sql语句
SELECT * FROM table WHERE Lft BEWTEEN 2 AND 11 ORDER BY Lft ASC
是不是很简单,剩下的就是我们需要处理层数
这样做的缺点也比较明显,就是添加或者编辑的时侯,相关分类的左值和右值都会变化,所以适用于那些不常改动分类的处理(我想,大部分分类都不用经常变更的吧,^_^)

完整代码下载
SortTest.rar (6.21 KB)

演示地址(在下载地址里面附有完整示例)
http://www.mengsa.cn/SortTest.php

本类未处理好的地方在于,编辑分类的时侯,不相关分类的左右值也有变化,但这不太影响适用,如果你修正了这个问题,请发一份源码给我 psdshow at yahoo.com.cn谢谢
昵称: psdshow  时间: 2007-12-11 15:07:00
顶,研究研究
昵称: 奇将射天狼  时间: 2007-12-11 17:19:00
对,这个和父子ID的效率区别在哪里?
对于显示和编辑。。
昵称: thankwsx  时间: 2007-12-11 17:21:00
这个思维方式很有意思!

不过这个算法缺陷未免太大了吧,分类很容易就会改变的。
昵称: 奇将射天狼  时间: 2007-12-11 17:26:00
难的不是分类而是操作分类里的数据
昵称: yzxh24  时间: 2007-12-11 20:58:00
实用性不是很好,比传统的3字段无限分类没什么优势,我写的无限分类操作类,也只查询一次数据库(查询数据库用的也不是递归,就是普通的select),接下来都是对数组的操作,效率上也不慢啊

[ 本帖最后由 T.T.R 于 2007-12-12 09:25 编辑 ]
昵称: T.T.R  时间: 2007-12-12 09:24:00
引用:
原帖由 奇将射天狼 于 2007-12-11 17:26 发表
这个思维方式很有意思!

不过这个算法缺陷未免太大了吧,分类很容易就会改变的。
分类改变是没有问题的.因为除了左值右值以外,分类的id是不变的
但是如果经常需要更新或者修改分类就麻烦一点
优点在于查询数据库方面

[ 本帖最后由 psdshow 于 2007-12-12 18:29 编辑 ]
昵称: psdshow  时间: 2007-12-12 18:28:00
应鼓励原创精品!
昵称: luzhou  时间: 2007-12-12 19:43:00
这个不错啊 学习下
昵称: aksoft  时间: 2007-12-28 17:09:00

用我的文本库好了!多级分类一个级别一个文件-_-
昵称: MoHock  时间: 2007-12-28 17:13:00
研究看看
昵称: eisdl  时间: 2007-12-29 02:09:00
恩 看看这个左右值无限分类
昵称: kissweb  时间: 2008-02-16 12:32:00
是个好方法,不然MYSQL公司也不会在官网上推荐了
昵称: yagas  时间: 2008-02-26 09:19:00
感谢楼主,,和大家分享你的成果!
学习了。3Q
昵称: lxylxy888666  时间: 2008-03-01 19:46:00
这个不错啊 学习下
昵称: lxydyx  时间: 2008-03-21 17:11:00
有人发过
昵称: bit  时间: 2008-03-25 11:17:00
顶,研究研究
顶,研究研究
昵称: luzhou  时间: 2008-03-25 13:40:00
帮你顶下


再留个名
http://wolf.rorchina.net/ 狼盟编程论坛

http://bbs.rorchina.net/ RORCHINA中国社区门户

http://club.unix5.com/ UNIX开源世纪
昵称: 会飞的猪  时间: 2008-03-25 21:19:00