设计树形结构

设计树形结构,后面再研究下是否可行数据结构

若是你的树深度是可预期的话,有个超简单的数据结构。你须要3个字段来表达这个树:spa

  1. id,本节点的primary key
  2. parent_id,其值为父节点的primary key
  3. key,忘了学名叫啥了,你能够称为线索
  4. level,表示当前节点到根节点的距离

其中,key字段的值为:从跟节点到父节点的primary key,中间用任意非数字符号分割。设计

例如如下树状结构code

├── a
│   ├── d
│   │   ├── p
│   │   ├── q
│   │   └── r
│   ├── e
│   └── f
├── b
│   ├── x
│   ├── y
│   └── z
├── c

| id | value | parent_id | key   | level |                                
| 1  | a     | 0 | "-" | 1 | | 2 | b | 0 | "-" | 1 | | 3 | c | 0 | "-" | 2 | | 4 | d | 1 | "1-" | 2 | | 5 | e | 1 | "1-" | 2 | | 6 | f | 1 | "1-" | 2 | | 7 | x | 2 | "2-" | 2 | | 8 | y | 2 | "2-" | 2 | | 9 | z | 2 | "2-" | 2 | | 10 | p | 4 | "1-4-" | 3 | | 11 | q | 4 | "1-4-" | 3 | | 12 | r | 4 | "1-4-" | 3 |

因而,在给定一个节点d的时候,string

  1. 查找d的全部子孙节点:select * from table_name where key like "${d.id}-${d.key}-%"
  2. 查找某个节点的全部子节点:select * from table_name where key like "${d.id}-${d.key}-%" and level=${d.level}+1
相关文章
相关标签/搜索