Chinaunix首页 | 论坛 | 博客
  • 博客访问: 198665
  • 博文数量: 264
  • 博客积分: 6010
  • 博客等级: 准将
  • 技术积分: 2740
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-03 13:25
文章分类

全部博文(264)

文章存档

2011年(1)

2009年(263)

我的朋友

分类:

2009-06-03 14:26:22

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

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

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

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

这里有详细的说明(虽然文字我们看不懂,但是代码和图示还是能看的 ^_^)



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

完整代码下载


演示地址(在下载地址里面附有完整示例)
阅读(149) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~