平常我们分类的是这样的
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) |