首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql,树型结构函数

问Mysql,树型结构函数
EN

Stack Overflow用户
提问于 2012-03-26 15:01:32
回答 2查看 2.3K关注 0票数 1

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

在MySQL中,有没有很好的辅助函数来遍历这样的树结构?

例如,如果我的表中有一行,并且我希望能够检索到它上面的所有"parents“。所以获取它的父母的父母ID等等...

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-26 15:15:49

从这个流行的link复制

代码语言:javascript
复制
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 |
+-------------+----------------------+-----+-----+

您可以使用它来查找节点FLASH中的所有父节点

​

检索单个路径

使用嵌套的set模型,我们可以检索单个路径,而不需要多个自联接:

代码语言:javascript
复制
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                |
+----------------------+

这之所以有效,是因为孩子的left将位于父母的left和right之间。

您可以进一步read或搜索修改后的预序树遍历。

票数 2
EN

Stack Overflow用户

发布于 2012-03-26 15:16:44

请阅读这篇"Hierarchical queries in MySQL“文章,深入了解该主题。

但是我仍然想保持简单,创建一个递归的PHP函数。

但在阅读了几篇文章后,我发现考虑这一点的最好方法是Modified Preorder Tree Traversal,,this文章中对此进行了进一步的解释。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9867898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档