mysql 查询深度_用depth字段优化指定深度节点的查询

回到我们之前的数据库字段设计,我们知道 parentid 可以和 id 字段结合来输出无限级分类的输出,还能用来表示节点间的关系。

这种设计用得很普遍,而且是最省存储空间,但是却不是最有效率的。比如现在我们有这么一个需求,需要查询指定深度节点时就会遇到问题。因为是采用递归(递归的效率你懂的)的方法,我们需要通过递归来逐层展开才能获取到所有该层的节点,然后再在其中进行查询实在既浪费时间又浪费空间。那么有没有更好的做法呢?

现在再来看看我的设计,增加了两个字段:depth 和 parentid_list。

depth 表示当前节点的深度的整数。

parentid_list 表示从根节点到当前节点的路径的字符串,采用节点名称不可能出现的字符作为分隔符。

现在输出树状结构:

07e6c9e8353c23053fa8512830853761.png

观察层级关系字段 parentid_list,和深度字段 depth,维护它们其实并不会很费力,因为有迹可寻的,用程序自动维护也是可以的。但是在查询的时候这两个字段却能给我们带来很大的便利,比如我们需要查询所有第三层的节点:

mysql> SELECT * FROM categories WHERE depth = '3';

+----+---------------+---------+----------+---------------+-------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值