一次查询完成基于“父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

[b]第一步,查询出所有数据[/b]

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

system => array(linux, unix, windows)
windows => array(qq, msn)

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


具体就不实现了,,做网盘的时候,目录我就是使用此方法,因同事不信一次查询能生成树,故写此blog。。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值