![]() |
1
1
您遇到的问题很明显,在SQL中是递归的。你需要得到父母的父母…并更新叶的总数(要么减去旧的并添加新的,要么重新计算)。您需要某种形式的标识符来查看树的结构,并获取要更新的叶的所有子节点和父级/路径列表。 这个方法添加了常量空间(表中有2列——但您只需要一个表,否则您可以稍后进行联接)。我之前玩过一个使用“左”列和“右”列(显然不是那些名称)的层次结构格式的结构,分别由顺序前遍历和顺序后遍历计算——不用担心,这些不需要每次都重新计算。 我让你看一页 using this method in mysql 如果您不喜欢此方法作为答案,则不要继续此讨论。但如果你喜欢的话,请发表/编辑,我会花些时间澄清。 |
![]() |
2
1
我不确定我是否正确理解你的问题,但这是可行的。 My take on trees in SQL . 链接后描述的在数据库中存储树的方法——在这种情况下是postgresql——但是该方法足够清晰,因此可以很容易地用于任何数据库。 使用此方法,您可以轻松地更新所有依赖于修改后节点的节点。 K 关于 n 简单选择查询 n 是距离 K 从根节点。 我希望你的树不是很深。 祝你好运! |