当前位置: 首页 > 面试题库 >

MySQL嵌套集-如何查找节点的父级?

秦建元
2023-03-14
问题内容

我使用以下各列来运行磨机嵌套集层次结构类型设置:

表名:

myset

列:

id, name, lft, rgt

有谁知道查询以确定节点的 父级

我读了几个地方,在表中也有一个 parent_id
列来跟踪它很方便,但是它看起来很多余,而且如果添加/时查询执行不正确,它似乎可能与嵌套集不同步删除/移动集合中的任何内容。


问题答案:

看这个问题。它与您的相似。我在那里发布了您可能需要的查询。

SELECT title, (SELECT TOP 1 title 
           FROM tree t2 
           WHERE t2.lft < t1.lft AND t2.rgt > t1.rgt    
           ORDER BY t2.rgt-t1.rgt ASC) AS parent
FROM tree t1
ORDER BY rgt-lft DESC

希望您有需要。

对于下表:

+-------------+----------------------+-----+-----+
| category_id | name                 | lft | rgt |
+-------------+----------------------+-----+-----+
|           1 | ELECTRONICS          |   1 |  20 |
|           2 | TELEVISIONS          |   2 |   9 |
|           3 | TUBE                 |   3 |   4 |
|           4 | LCD                  |   5 |   6 |
|           5 | PLASMA               |   7 |   8 |
|           6 | PORTABLE ELECTRONICS |  10 |  19 |
|           7 | MP3 PLAYERS          |  11 |  14 |
|           8 | FLASH                |  12 |  13 |
|           9 | CD PLAYERS           |  15 |  16 |
|          10 | 2 WAY RADIOS         |  17 |  18 |

它产生输出:

title                | parent
----------------------------------------------
ELECTRONICS          | NULL
PORTABLE ELECTRONICS | ELECTRONICS
TELEVISIONS          | ELECTRONICS
MP3 PLAYERS          | PORTABLE ELECTRONICS
FLASH                | MP3 PLAYERS
CD PLAYERS           | PORTABLE ELECTRONICS
2 WAY RADIOS         | PORTABLE ELECTRONICS
TUBE                 | TELEVISIONS
LCD                  | TELEVISIONS
PLASMA               | TELEVISIONS


 类似资料:
  • 问题内容: 我正在使用嵌套集(又名经过修改的预排序树遍历)来存储组列表,并且我试图找到一种快速方式来一次为所有组生成面包屑(作为字符串,而不是表)。我的数据也使用邻接表模型存储(有一些触发器可以使两者保持同步)。 因此,例如: 代表树: 节点A 节点B 节点C 节点D 节点E 节点F 我希望能够有一个返回表的用户定义函数: 为了使它稍微复杂一点(尽管这超出了问题的范围),我还需要遵守用户限制。因此

  • 问题内容: 我需要一个MySQL查询,该查询可在一个嵌套集中移动一个节点及其所有子节点。我找到了这个站点,但是该函数似乎非常不合逻辑- 没有或没有嵌套的集合模型,并且代码本身仅比所需的更长。我在表格中仅有的额外一列是。 我不能只删除并再次添加该节点,因为它将丢失其ID。 问题答案: 我知道,这个主题已经很老了,但是无论如何仍然没有答案。我是从Google来到这里的,没有找到这个问题的直接答案。 因

  • 我正在尝试解决以下算法: 您有一棵n元树。找到满足以下条件的所有节点: < li >该节点有子节点,但所有子节点都是叶节点(它们没有子节点)。返回仅叶父节点的列表及其在树中的深度。 因此,如果我有下面的树,唯一满足上述条件的节点是D,因为它有子节点(E),但它们没有子节点。 我试图在Java中实现这一点,但伪代码也适用于我。我在这里实现了树和节点结构:Java中的N元树。 我需要的只是算法。

  • 问题内容: 我想获取所有属于以下子项的标签: 我知道如何找到像这样的特定类的元素: 但是我不知道如何找到所有的孩子,而不是其他孩子。 就像我想选择: 问题答案: 尝试这个

  • 问题内容: 我知道这类问题已经在这里多次发布,例如:Java方式 我在标准树模式的数据量庞大(150K +)( , ,) 问题: 如何获取给定node_id的叶子? 表结构: 数据库: 问题答案: 无法在单个查询中执行此操作。即使有,它也可能效率很低。 我们可以通过存储过程和循环来实现。使用添加的索引,它也应该很快。这使用两个表从输入表(A)中选择节点,并将该节点及其子级插入(B)。然后,它将B交

  • 我试图想出一个密码查询,可以返回某些父母的孩子节点,其中孩子的父母都是期望的父母。 我在这个控制台上有一个示例数据集:http://console.neo4j.org/?id=nsq8c1 在该示例中,我们有包含父节点的组节点,以及正好有2个父节点的子节点,并且所有组中的所有父节点与每个其他父节点都有一个子节点。现在我想要回父母都在第一组的孩子。 我尝试的示例查询是