我的数据库中有一个表,其中使用混合嵌套集(MPTT)模型(具有lft
和的rght
值)和邻接列表模型(存储parent_id
在每个节点上)存储树结构。
my_table (id, parent_id, lft, rght, alias)
这个问题与树的任何MPTT方面都不相关,但是我想我将其保留,以防万一有人对如何利用它有个好主意。
我想将别名的路径转换为特定的节点。例如:"users.admins.nickf"
将找到别名为“ nickf”的节点,该节点是别名为“
admins”的节点的子节点,别名为“ users”的根节点。上有一个唯一索引(parent_id, alias)
。
我首先编写函数,以便将路径拆分为各个部分,然后一个一查询数据库:
SELECT `id` FROM `my_table` WHERE `parent_id` IS NULL AND `alias` = 'users';-- 1
SELECT `id` FROM `my_table` WHERE `parent_id` = 1 AND `alias` = 'admins'; -- 8
SELECT `id` FROM `my_table` WHERE `parent_id` = 8 AND `alias` = 'nickf'; -- 37
但是后来我意识到,使用可变数量的嵌套,我可以通过一个查询来做到这一点:
SELECT `id` FROM `my_table` WHERE `parent_id` = (
SELECT `id` FROM `my_table` WHERE `parent_id` = (
SELECT `id` FROM `my_table`
WHERE `parent_id` IS NULL AND `alias` = 'users'
) AND `alias` = 'admins'
) AND `alias` = 'nickf';
由于子查询的数量取决于路径中的步骤数,因此我是否会遇到 子查询过多的 问题?(如果有这样的事情)
有没有更好/更智能的方法来执行此查询?
这行得通吗?
select r0.id
from my_table as r0
join my_table as r1 on(r0.parent_id = r1.id)
join my_table as r2 on(r1.parent_id = r2.id)
where r0.alias='nickf'
and r1.alias='admins'
and r2.alias='users'
and r2.parent_id is null
在我看来,实际上并不需要嵌套的子查询。
还是我错了,错过了什么?
def deep(root): if not root: return print root.data deep(root.left) deep(root.right) if __name__ == '__main__': lookup(tree) deep(tree)
我试图解剖一个深度嵌套的对象。遍历它并将数据拉到一个单个级别的对象,然后再与一个更大的对象结合在一起。我可以用下面的代码遍历它,但它不是动态的。这只有在我知道它的4个物体深度的情况下才起作用。实际上它可以是1->n深。我还有一个函数,它在该级别检查值的类型,并对其进行相应的处理。现在这对我很管用 这里是顶层 下面是每一个级别: 希望这是足够的上下文来了解我当前在做什么。现在,我有数据可以通过一个数
问题内容: 我试图遍历嵌套对象以检索由字符串标识的特定对象。在下面的示例对象中,标识符字符串是“ label”属性。我无法解决如何遍历树以返回适当对象的问题。任何帮助或建议,将不胜感激。 问题答案: 您可以创建像这样的递归函数来对对象进行深度优先遍历。 可以这样称呼
给定一个数组,构建二叉树,并且按层次打印这个二叉树
本文向大家介绍Python实现深度遍历和广度遍历的方法,包括了Python实现深度遍历和广度遍历的方法的使用技巧和注意事项,需要的朋友参考一下 深度遍历: 原则:从上到下,从左到右 逻辑(本质用递归): 1)、找根节点 2)、找根节点的左边 3)、找根节点的右边 广度遍历: 核心:队列+递归 以上这篇Python实现深度遍历和广度遍历的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希
问题内容: 假设我有一个像这样的JSON数组: 不,我想基于id查找某个对象,一旦有了该对象,就需要它的子代及其所有childs子代 所以可以说如果 4d024610-a39b-49ce-8581-a18500739a75* 我想找到一个具有ID的元素 * 那应该找到Element Sub2 现在,它应该产生所有将产生的所有子元素id id: 假设我会做 因此,我猜它有两个部分,首先找到“父”元素