3

MySQL データベースがあり、以下のテーブル構造にユーザー レコードを保存しています。

User_mst
-------------------
id
user_name
parent_id
left_id
right_id
position       (keyword "left", "right" as string)
node_level

各ノード (ユーザー) の下に最大 2 つの子ノードがあることを意味するように、バイナリ ツリー構造でユーザー レコードを格納しています。

この構造から、次の関数を作成したい

入力:

1.user_id
2.level
3.position

出力は次のようになります。

user_idgiven on givenlevelおよびgiven の下にあるノードの数position

たとえば、関数が以下のような場合

get_nodes(3, 4, 'left');

次に返されるはずです:レベル4のユーザー ID 3の下にX個のノードがあります

提案が欲しいのですが、再帰的に処理する関数を構築する必要があると思います。

この関数の作成を手伝ってください。C、PHPなどのプログラミング言語を使用してください。ここでロジックを探しているだけです。

Create Table の SQL といくつかのサンプル Insert ステートメントを次に示します。

http://paste.ubuntu.com/1218345/

前もって感謝します

4

1 に答える 1

1

ロジックを探しているだけなら、疑似 C コードで問題ありません。

struct NodeStructure
{
  int ID;
  int leftID;
  int rightID;
  int level;
  ...
};

int countChildren( int nodeID, int level )
{
  NodeStructure * node = find( nodeID );

  if( node == NULL )
    return 0;

  if( node.level == level )
    return 1;

  return countChildren( x.leftID, level ) + countChildren( x.rightID, level );

}

NodeStructure * find( int nodeID )
{
  // SQL CODE:
  // SELECT * FROM User_mst WHERE id = nodeID;

  // if( /* node has been found */ )
    // fill NodeStructure
  // else
    // return NULL;
}
于 2012-09-21T09:44:02.323 に答える