2011-11-10 15 views
-2

から引き出されたツリー構造を表示するには、PHPを使用した:私はこれらのレコードを持つデータベーステーブルを持つデータベース

parent_id child_id  
    0 1 
    0 2 
    0 3 
    0 4 
    0 5 
    0 6 
    0 7 
    0 8 
    0 9 
    0 10 
    0 11 
    0 12 
    1 13 
    1 14 
    1 15 
    2 16 
    2 17 
    2 18 
    3 19 
    3 20 
    3 21 
    4 22 
    4 23 
    4 24 
    5 25 
    5 26 
    5 27 
    6 28 
    6 29 
    6 30 
    7 31 
    7 32 
    7 33 
    7 34 
    1 35 
    1 36 
    1 37 
    1 38 
    1 39 

私は再帰関数を使用して、親/子を持つツリー構造を構築したいです。

function recursion ($parentID, $lvl){ 

$query = 'SELECT parent_id, child_id FROM ///// WHERE parent_id='.$parentID;  
$this->_db->setQuery($query); 
$this->_db->query(); 
$records = $this->_db->loadObjectList(); 

$count = count($records); 

    if ($count > 0){ 
      foreach ($records as $item){ 
       print_r ("parent id ".$item->parent_id."child id ".$item->child_id." lvl-> ".$lvl."</br>"); 
       return $this->recursion($item->child_id, $lvl+1); 
     } 
    } 
} 

マイコードのみプリント:

parent id 0child id 1 lvl-> 1 
parent id 1child id 13 lvl-> 2 

私はツリー全体を印刷する方法を見つけ出すことはできません。私は正しい道にいると思う。誰かが私に木全体を印刷する方法のヒントを与えることができますか?

+0

Raim、通常、使用している言語で質問にタグを付けることをお勧めします。これにより、人々はどの質問に答えることができるのかを特定することができます。 – jmg

+0

あなたのやり方ではありませんが、おそらくこれはあなたを助けます:http://crisp.tweakblogs.net/blog/317/formatting-a-multi-level-menu-using-only-one-query.html - - そのようなツリービューを構築する方法に関する簡単で短いチュートリアル。 – w00

答えて

1

返信を削除します。

次回は紙を取り、コードを1行ずつ歩いて行きます。起こることを書いてください。それについて考える。

先生に感銘を与えたい場合は、の代わりにの再帰を行う方法を理解してください。ほとんどの再帰関数は手続き型にすることができ、メモリを少なくします。

+0

お返事ありがとうございました。喜んで助ける人がいます:)返却を取り除くことは私の問題を解決しました。そして現在はすべての親を印刷しています。素敵な一日を過ごすGustav Bertram、もう一度ありがとう:) – Raim

+0

答えがあなたを助けたら、あなたは**答えを受け入れることができます**。方法についてはFAQを参照してください:http://stackoverflow.com/faq#howtoask –

+0

また、thx。受け入れられました。 – Raim

1
  1. ツリー全体を印刷したい場合は再帰を使用しないでください。

  2. 正しいSQLクエリを作成し、必要なものを適切に出力します。

  3. 入手したいことについてさらに詳しく知っていれば、より手助けすることができます。

ありがとう。

+0

それはポイントです、私は再帰でそれを行う私の先生からのタスクがあります。昨日、彼は私が正しい道にいると言った。あなたが見ることができるように、私のコードはレコードを通過し、最初の変数は0なので、それは親の0で始まり、それからthatsの親child(1)をとり、親としてchildsの値を返し、その値でdbを検索し、1を返します、13 - レベルが上がり、再び、検索は13として親として行われ、その後停止します。私はそれをすべてのDBに通していきたい。それが枯れてしまった場合(今のように)、すべてのDBがチェックされるまで、それを以前のレベルに戻し、すべてをやり直したい。 – Raim

関連する問題