-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 に答える