有如下一棵树:
root
|_ Child 1
|_ Child 1.1
|_ Child 1.2
|_ Child 2
|_ Child 2.1
|_ Child 2.2
也可以写成以下结构:
___________________________________________________________________
| Root |
| ____________________________ ____________________________ |
| | Child 1 | | Child 2 | |
| | __________ _________ | | __________ _________ | |
| | | C 1.1 | | C 1.2 | | | | C 2.1 | | C 2.2 | | |
1 2 3_________4 5________6 7 8 9_________10 11_______12 13 14
| |___________________________| |___________________________| |
|___________________________________________________________________|
数字代表左右边界,数据库中表的结构为:
id | parent_id | lft | rgt | data
1 | | 1 | 14 | root
2 | 1 | 2 | 7 | Child 1
3 | 2 | 3 | 4 | Child 1.1
4 | 2 | 5 | 6 | Child 1.2
5 | 1 | 8 | 13 | Child 2
6 | 5 | 9 | 10 | Child 2.1
7 | 5 | 11 | 12 | Child 2.2
选出一个父结点parent的所有孩子:
SELECT * FROM table_name WHERE lft > parent.lft AND lft < parent.rgt
如选出结点Child 1的所有子结点:
SELECT * FROM table_name WHERE lft > 2 AND lft < 7
结果为:
id | parent_id | lft | rgt | data
3 | 2 | 3 | 4 | Child 1.1
4 | 2 | 5 | 6 | Child 1.2
计算一个结点的孩子的数目:
(right - left - 1)/2
选出node结点和它所有的父结点:
SELECT * FROM table_name WHERE node.lft BETWEEN lft AND rgt
如选出结点Child 1.2和它所有的父结点:
SELECT * FROM tabla_name WHERE 5 BETWEEN lft AND rgt
结果为:
id | parent_id | lft | rgt | data
1 | | 1 | 14 | root
2 | 1 | 2 | 7 | Child 1
4 | 2 | 5 | 6 | Child 1.2
这样比递归查询要快多了。
注意:left和right是数据中的保留字
分享到:
相关推荐
要使用awesome_nested_set您的模型需要具有3个字段: lft , rgt和parent_id 。 这些字段的名称是可配置的。 您还可以具有可选字段: depth和children_count 。 这些字段是可配置的。 请注意, c
betternestedset,plugin 博文链接:https://taito.iteye.com/blog/237321
与和awesome_nested_set一起使用。 奖励功能: 对带有rails_admin_toggleable的已enabled列的特殊情况支持 cover和image栏的特殊情况支持 安装 将此行添加到应用程序的Gemfile中: gem 'rails_admin_nested_set...
蒙古样嵌套集 Mongoid嵌套集是Mongoid的嵌套集模式的实现。...要开始使用Mongoid嵌套集合,只是声明acts_as_nested_set您的手机型号: class Category include Mongoid::Document acts_as_nested
嵌套阵列DOA估计matlab例程,基于Nested Arrays A Novel Approach to Array Processing With Enhanced Degrees of Freedom。
extended_nested_scroll_view 语言:| NestedScrollView:扩展的嵌套滚动视图,可解决以下问题。 1. 2. 3.拉动刷新不起作用。 4.在NestedScrollView的主体中不使用ScrollController 第2步 NestedScrollView拉动...
python库。资源全名:drf_nested_forms-1.0.0.tar.gz
资源来自pypi官网。 资源全名:mbf_nested_intervals-0.2.0.tar.gz
python库。 资源全名:drf_nested_forms-0.2.1-py3-none-any.whl
资源来自pypi官网。 资源全名:drf_nested_forms-1.1.5-py3-none-any.whl
python库,解压后可用。 资源全名:drf_nested_routers-0.92-py2.py3-none-any.whl
资源来自pypi官网。 资源全名:drf_nested_resources-1.1.dev0-py3-none-any.whl
资源来自pypi官网。 资源全名:drf_nested_routers-0.92-py2.py3-none-any.whl
资源分类:Python库 所属语言:Python 资源全名:drf_nested_decorator-0.3-py2-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
资源分类:Python库 所属语言:Python 资源全名:drf_nested_resources-1.0b3-py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059