我有一棵这样的树
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中建议一些可行的方法
答案 0 :(得分: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;