我不太确定自己是在说这种权利,但请耐心等待。
我想知道是否有可能在SQL(特别是MySQL)中做这样的事情:假设我们有树状数据保存在下表中的数据库中:
mysql> desc data_table;
+------------------------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+---------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| parent_id | int(10) unsigned | YES | MUL | NULL | |
| value | text | YES | | NULL | |
因此,除“根”行外,每一行都有一个父级,而叶行除外,每一行都有子级。
是否可以仅使用SQL查找任何给定行的所有后代?
可以仅使用SQL而不是在单个查询中获取所有后代。但是我敢肯定,你知道了。我假设您的意思是您想在单个查询中执行此操作。
您可能对阅读一些用于存储树结构的替代设计感兴趣,这些设计确实使您能够使用单个SQL查询来获取所有后代。请参阅我的演示文稿《使用SQL和PHP的层次数据html" target="_blank">模型》。
您还可以对其他品牌的数据库(例如PostgreSQL)使用递归SQL查询,但是MySQL当前不支持此功能。
我们已经见到了树数据结构的基本功能,现在是看树的一些额外使用模式的时候了。这些使用模式可以分为我们访问树节点的三种方式。有三种常用的模式来访问树中的所有节点。这些模式之间的差异是每个节点被访问的顺序。我们称这种访问节点方式为“遍历”。我们将看到三种遍历方式称为前序,中序和后序 。让我们更仔细地定义这三种遍历方式,然后看看这些模式有用的一些例子。 前序 - 在前序遍历中,我们首先访问根节点,然后递归
我已经实现了一个四叉树来对图形中的点进行排序。每当一个点落在已经包含一个点的象限内时,该象限就会再次细分,以允许每个点落入其自己的象限。每个节点都具有以下属性: 假设我想遍历存储在这棵树中的每个节点,并计算落在给定矩形边界内的点数,我将如何递归检查树中的每个节点(假设我已经有方法检查它们是否落在某个区域)?
还拿”爱丽丝梦游仙境”的文档来做例子: html_doc = """ <html><head><title>The Dormouse's story</title></head> <body> <p><b>The Dormouse's story</b></p> <p>Once upon a time there were three little sisters; and their
还拿”爱丽丝梦游仙境”的文档来做例子: html_doc = """ <html><head><title>The Dormouse's story</title></head> <body> <p class="title"><b>The Dormouse's story</b></p> <p class="story">Once upon a time there were thre
遍历是访问树的所有节点的过程,也可以打印它们的值。 因为所有节点都是通过边(链接)连接的,所以我们总是从根(头)节点开始。 也就是说,我们不能随机访问树中的节点。 我们使用三种方式遍历树 - 有序遍历 Pre-order Traversal Post-order Traversal 通常,我们遍历树以搜索或定位树中的给定项或键或打印它包含的所有值。 In-order Traversal 在此遍历方
所以我在研究树遍历算法。例如,在K-d树遍历中,我们的目标是遍历节点直至叶子。这与其说是一个树搜索,不如说是一个根到叶的遍历。 在这种情况下,递归解决方案就足够了。但是,在C等语言中,递归调用函数需要将值推送到堆栈上,并在堆栈帧之间跳跃等。标准的递归方法类似于: 因此,考虑到二叉树有一个明确的上界(我相信这也可以扩展到其他树类型),以迭代方式执行此遍历是否更有效: 二叉树的最大高度是它的节点数,而