昨天看到qq群里面有人在问无限级分类的问题,我想了下,我怎么没有把以前写过的这个无限级分类的实现方法总结一下呢,想想真是遗憾,所以今天就总结一下php的无限级分类的数据库试剂和sql实现。

很多程序员再遇到问题的时候总是想能上网一下搜一个一模一样的实现方法出来,但是我们想一想,首先是这样不现实,第二是这样对我们本身的发展没有什么好处,好的程序员当困惑在某一点的时候,都是只查这某一点的实现原理,当突破了这一点,就应该好好的总结,然后写出自己风格的代码。我们会了这些一个个小的部件,通过自己的组合和规划就能实现很多很多的功能,这样当你再遇到类似的问题时就不会再完全靠搜搜解决方法来实现了。这样你就有了自己的一套体系。好了,说一下这个无限级分类,其实这个分类比较简单,只是很多php程序对于myqsl的一些函数不是很了解。这里我们用到了mysql的一个concat函数,他可以将多个字段进行组合,并且,以他组合后的结果排序是按照类似拼音排序,或奥运奖牌榜排序一样,先比较第一位,第一位大就大,第一位相同再比较第二位,这样以此类推。有了这样的原理,那么我们组合分类的时候可以加一个path字段,这个字段存储其所有上级类别的“路径”这个是数据库设计和一些地区信息为例北京和山东为顶级栏目,海淀和泰安是二级栏目,宁阳是三级栏目,宁阳隶属于泰安。现在他们的顺序是杂乱无章的,我们要实现的结果就是北京、海淀、山东、泰安、宁阳。这样的顺序,所以,我们可以用这个sql语句

select id,concat(path,’-',id) as abspath,name from admin order by abspath

结果就是。这正是我们想要的结果,而要在页面中如何显示就我们自己定义了,我们可以根据这个abspath这个新定义字段来分割一下,就可以实现等级的缩进效果。好了。这个是核心,有了这个比如你如何添加类别记录等,我们认为大家应该可以琢磨出来吧,看一下数据结构就明白,但选择顶级栏目时可以让他的pid和path都为0,而选择了一个父级栏目就将其父id作为自己的pid,其父的path连上其父的id作为自己的path。

本文链接:http://www.521php.com/archives/449/

程序本天成,妙手偶得之!我们只是代码的搬运工!

转载请注明:http://www.521php.com/archives/449/?replytocom=85

目前有2 条留言

  1. 2012年09月07日 上午 11:33 http://www.wangqingwei.com.cn/   |  引用  |  #1     

    亲!你说的这营生怎么这么像冒泡排序啊!

发表评论

昵称:

网址:

eg.博客主题调用的是Gravatar头像,你可以通过邮箱注册获得头像.
/ 快捷键:Ctrl+Enter