Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql,树结构函数_Mysql - Fatal编程技术网

Mysql,树结构函数

Mysql,树结构函数,mysql,Mysql,我有一个选项卡,其中包含一个名为parent的列,可以存储父ID。 这使得创建我的数据的树结构成为可能 在MySQL中,有没有什么好的帮助函数可以用来遍历这样的树结构 例如,如果我的表中有一行,我希望能够检索上面的所有“家长”。因此,获取it父级的父级ID等等…复制自此流行的: 您可以使用此选项从节点FLASH查找所有父节点: 检索单个路径 使用嵌套集模型,我们可以检索单个路径,而无需 具有多个自连接: 这是因为孩子的左将位于父母的左和右之间 您可以进一步或搜索修改后的前序树遍历。请阅读这篇“

我有一个选项卡,其中包含一个名为parent的列,可以存储父ID。 这使得创建我的数据的树结构成为可能

在MySQL中,有没有什么好的帮助函数可以用来遍历这样的树结构

例如,如果我的表中有一行,我希望能够检索上面的所有“家长”。因此,获取it父级的父级ID等等…

复制自此流行的:

您可以使用此选项从节点
FLASH
查找所有父节点:

检索单个路径

使用嵌套集模型,我们可以检索单个路径,而无需 具有多个自连接:

这是因为孩子的
将位于父母的
之间
您可以进一步或搜索修改后的前序树遍历。

请阅读这篇“”文章,以获得关于该主题的深入解释

但我仍然希望保持简单,而是创建一个递归PHP函数


但在阅读了几篇文章之后,我发现最好的方法是修改预序树遍历,这在文章中有进一步的解释。

的可能副本有很多有用的链接。@Konerak,那是不同的-这个问题是问如何让所有的子代达到任何深度。在搜索结果中,我看到了很多关于树和sql的类似问题,但没有一个问这个问题——如何找到所有的父母。@BenLee的答案使用了我重复提出的问题答案中的链接中的信息。。。这个问题确实有点不同,但答案也涵盖了这个问题。树丛结构使用起来非常舒适,这也是我的建议
CREATE TABLE nested_category (
        category_id INT AUTO_INCREMENT PRIMARY KEY,
        name VARCHAR(20) NOT NULL,
        lft INT NOT NULL,
        rgt INT NOT NULL
);

INSERT INTO nested_category VALUES(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);

SELECT * FROM nested_category ORDER BY category_id;

+-------------+----------------------+-----+-----+
| 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 |
+-------------+----------------------+-----+-----+
SELECT parent.name
FROM nested_category AS node,
        nested_category AS parent
WHERE node.lft BETWEEN parent.lft AND parent.rgt
        AND node.name = 'FLASH'
ORDER BY node.lft;

+----------------------+
| name                 |
+----------------------+
| ELECTRONICS          |
| PORTABLE ELECTRONICS |
| MP3 PLAYERS          |
| FLASH                |
+----------------------+