Mysql,树结构的函数

时间:2012-03-26 07:01:32

标签: mysql

我有一个包含名为parent的列的tabel,它可以存储父ID。 这样就可以创建数据的树结构。

在MySQL中通过这样的树结构是否有任何好的帮助函数?

例如,如果我的表格中有一行,我希望能够检索其上方的所有“父母”。所以得到它的父母的父ID等等......

2 个答案:

答案 0 :(得分:2)

从这个受欢迎的link

复制
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中的所有父级:

tree 检索单个路径

  

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

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将介于其父母的leftright之间。
您可以read进一步搜索修改的预订树遍历

答案 1 :(得分:1)

请阅读此“Hierarchical queries in MySQL”文章,深入解释该主题。

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

但在阅读了几篇文章后,我发现最好的方法是 Modified Preorder Tree Traversal ,这已在this文章中进一步说明。