-1

我有一棵这样的树

      2 
   /  |  \
  3   4   6
     / \
    7   8
         \ 
          9   

在 db 表中看起来像这样

    node_id parent_id  
       2        0
       3        2
       4        2
       6        2
       7        4
       8        4
       9        8

问题是,如果我将 4 个节点 id 传递给函数,则返回应该在一个数组中(或逗号分隔),其中 7,8 和 9 (表示所有节点低于 4 )。我尝试了递归函数,但没有得到我真正期望的结果。请在PHP中提出一些可能的方法

4

1 回答 1

2

可以看这篇文章: http: //mikehillyer.com/articles/managing-hierarchical-data-in-mysql/(原来是在mysql.com下发表的,后来被删了)

对于您的数据,您可以尝试类似于以下内容:

CREATE TABLE `tree` (node_id INT NOT NULL,
parent_id   INT NOT NULL);

INSERT INTO `tree`(node_id, parent_id) VALUES(2,0),
(3,2),
(4,2),
(6,2),
(7,4),
(8,4),
(9,8);


SELECT t1.node_id AS lev1, t2.node_id AS lev2, t3.node_id AS lev3, t4.node_id AS lev4
FROM tree AS t1
LEFT JOIN tree AS t2 ON t2.parent_id = t1.node_id
LEFT JOIN tree AS t3 ON t3.parent_id = t2.node_id
LEFT JOIN tree AS t4 ON t4.parent_id = t3.node_id
WHERE t1.node_id = 4;
于 2013-03-25T10:22:35.763 回答