gpt4 book ai didi

python - sql:如何存储树数据并进行递归遍历(通过查询)?

转载 作者:太空宇宙 更新时间:2023-11-04 06:02:49 25 4
gpt4 key购买 nike

我正在尝试存储这样的数据结构。当然这是一个简单的例子,但其他树在同一层级会有多个节点。

(树取自 https://github.com/caesar0301/pyTree )

Harry
├── Jane
│ ├── Mark
│ └── Diane
│ ├── Mary
│ └── George
│ └── Jill
└── Bill

我考虑过为每个深度创建一个表。

lvl 1 | lvl 2 | lvl 3 | lvl 4  | lvl 5 |
Harry | Jane | Mark | Mary | Jill |
| Bill | Diane | George | |

我想做一个递归查询或递归遍历,访问所有层级的所有叶节点。

我应该为每个级别创建一个表格吗?这似乎不太好。我是否应该有一张表,其中有一列称为父项和子项?

id | name  | parent
1 | Harry | 0
2 | Jane | 1
3 | Bill | 1
4 | Mark | 2
5 | Diane | 2
6 | Mary | 5
7 | Gerge | 5
8 | Jill | 7

一天结束时,我需要生成一个查询,该查询将一个接一个地生成以下系列。

Harry, Jane, Mark
Harry, Jane, Diane, Mary
Harry, Jane, Diane, George, Jill (mark Jill as done, because it is a leaf node)
Harry, Jane, Bill

叶子节点在被读取一次时被标记为完成。

额外的节点可能会在任何时间在任何级别添加(由另一个进程),我需要一种方法来知道我什么时候“完成”(当所有叶节点都完成时)。包含叶节点的父节点只有在其所有后代节点都完成后才会被标记为完成。

一些伪代码(对此不太确定)

getChildren(1)

def getChildren(parent):
while children.size > 0:
children = getChildren(parent)
for child in children:
if isLeaf(child):
markDone(child)
else:
getChildren(child)

return children

每隔一段时间,我需要检查一下表,看是否还有未检查的节点。如果没有,则我们正式“完成”。

我是否在正确的轨道上,或者是否有另一个最佳解决方案,或者甚至是一个图书馆已经在做这种类型的工作?

最佳答案

在 sql 中有一种有趣的方法:

http://www.codeproject.com/Articles/8355/Trees-in-SQL-databases

祝你测试顺利。

关于python - sql:如何存储树数据并进行递归遍历(通过查询)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23879955/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com