一次查询完成基于“父id"的无限分类

无限分类谈得太多了,无非三种方法“路径”“左右值”“父id”,网上的讨论得比较多,具体实现就不再次讨论了。三种方法,各有优缺点。

“父id”的优点在于实现简单和移动节点简单,缺点在于查询麻烦。

我想,对于“父id”这种无限分类的查询,多数人都是使用递归来实现了,性能自然不用说,分成n条sql去查询,对mysql的造成不少负载。

如果,仔细考虑下个递归过程,完全可以一次把数据查询出来,然后在程序里循环生成。

每次递归无非是查询一下当前id是否有子节点,然后子节点又递归下去,,也就是只要解决查询某个id是否有子节点就可以完成了。

解决这个问题的方法很简单,再配合hash table来查询,键是parent_id值是分类集合,用php实现起来很简单。

假如,有分类如下
system --> linux
system --> unix
system --> windows
system --> windows -> qq
system --> windows -> msn

第一步,查询出所有数据

第二步,重组数据
循环一遍,根据父id集合数据

系统 => array(linux, unix, windows)
window => array(qq, msn)

第三步,递归生成
这步,把查询sql改成查hash table。第二步里生成的集合,就是模拟查询的.根据parent_id在hash table里查询。


具体就不实现了,,做网盘的时候,目录我就是使用此方法,因同事不信一次查询能生成树,故写此blog。。

你可能感兴趣的:(PHP/PHP基础/PHP高级)