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