Home  >  Article  >  Database  >  如何定义深度未知的层次结构

如何定义深度未知的层次结构

WBOY
WBOYOriginal
2016-06-07 15:28:201137browse

深度未知的层次结构在现实生活中经常出现,比如公司的员工组织关系、地域关系、文件系统中的树形结构等等,在展示的时候都可以很清楚的看到上下之间的关系。那么后台又是如何实现的呢。接下来介绍两种方法。 第一种:按编码从小到大的方式排序(展示比较容易

深度未知的层次结构在现实生活中经常出现,比如公司的员工组织关系、地域关系、文件系统中的树形结构等等,在展示的时候都可以很清楚的看到上下之间的关系。那么后台又是如何实现的呢。接下来介绍两种方法。

第一种:按编码从小到大的方式排序(展示比较容易)

用两列实现,第一列表示编码,第二列表示级数,比如

00 1

0001 2

0002 2

000101 3

。。。

那么在展示的时候只需要按照编码从小到大排序即可,但是这里有一个问题就是如何判断当前结点是否为叶子结点,这里采用的方法是判断当前值与下一个值是否具有子串的关系,如果有,则不是;否则是叶子结点。

第二种:自引用的父子关系(sql 不好实现)

也是用两列实现,第一列表示自增的主键id,第二列引用第一列parentid,比如

1 1

2 1

3 1

4 2

...

那么在展示的时候需要知道其最大深度,有n级则inner join n-1次。
可以从最低级向最高级inner join:每次保留parentid即可
或可以从最高级向最低级inner join:每次保留id即可。

比如:

--从高级向低级查找
select E.id,level1,level2,level3,E.name as level4 from (
select D.id,level1,level2,D.name as level3 from (
select B.id,A.name level1,B.name level2 from 
region as A inner join region as B
on A.id=B.parentid) as C inner join region as D
on C.id=D.parentid) as D inner join region as E
on D.id=E.parentid


--从最低级向最高级查找
select F.parentid,F.name level1,level2,level3,level4 from 
(
select D.parentid,D.name level2,level3,level4 from
(
select A.parentid,A.name level3,B.name level4 from 
region as A inner join region as B
on A.id=B.parentid) as C inner join region as D
on C.parentid=D.id) as E inner join region as F
on E.parentid=F.id

 

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn