2012-03-19 10 views
7

PHP(CodeIgniter)とMySQLを使用してウェブサイト用のMLMツリーを実装しています。私は、データベースにバイナリツリーの実装が必要です。以下のものが考慮されるべきである:各ノードに対してPHP + MySQLを使用したバイナリツリー

  1. 、左の部分木の子供たち/ノード数と子どもの数の最小値は、/右サブツリー内のノードがペアと呼ばれています。各ノードの1つのノードは1ポイントを取得します(ノードはユーザーを表します)。

  2. 新しいノードが作成されると、ノードのペアの多くが増分される可能性があります。したがって、ノードが作成されるたびに、すべてのノードのポイントを更新する必要があります(適用可能な場合は、1つずつ増やす必要があります)。

  3. 任意のノードが100ポイントを超えることはできません。

  4. また、ツリーを構築(ウェブページで表示)する必要があります。表示されるのは4〜5レベルのみです。

  5. データベースは、私は、MySQLでhieararchicalデータをimplemmentingための主に4モデル、PHP

    1. 隣接リスト
    2. パス列挙
    3. を発見した100000のノード

    を持っている可能性があります入れ子セット

  6. クロージャテーブル

私は挿入オーバーヘッドを減らし、適用可能なすべてのノードのポイントを正常に更新するソリューションを探したいと思います。

私は隣接リストソリューションを試しました。

node (id, parentid, leftChildId,rightChildId,leftCount,rightCount) 
userStat(id,sdate,pairs,mlmIncome) 

一つのノードが挿入されるたびに、私は上向きに行くと子供をインクリメント保つには、.IF新しいペアが、私は、ストアドプロシージャでこれらをやっている ..私はまたことをインクリメントし、ポイントをインクリメント、その後行われるカウントします。

このソリューションをネストセットで選択したのは、各ノードが挿入されるたびに です。ネストされたセットで更新するノードの数は、常に隣接リストより多いためです。

木を構築する速度は挿入以上ですが、そしてネストされたセットは木を作る上でより良いです。

私は正しい方向にいますか?助けてください !

Thnx in Advance!このブログはmanaging hierarchy data

であなたを助けるかもしれない

+0

を理解することはできませんが、完全に合理的な質問はそうです! +1 – dmp

+0

thnx danp、解決策を教えてもらえますか? –

+0

私はcodeigniterでClosure Table階層を実装していますが、このコードを見ると便利でしょうか? – dmp

答えて

1

これがdownvotedれた理由あなたの質問に最も聞き覚え1はおそらくModified Preorder Tree Traversal

+0

あなたの返信のためのThnxフィリップ。実際に私はこの質問をする前に両方の記事を読んだ。私はそれに従うwhitchの解決策を決めることができません..... 入れ子になっているセットは私には良く見えますが、私はそれが持っている挿入オーバーヘッドに懸念しています。 –

関連する問題