11

ツリー GUI コンポーネントのデータを表す MySQL テーブルがあります。テーブルの構造は次のとおりです。

treeTable ( 
  id INT NOT NULL PRIMARY KEY, 
  parentId INT, 
  name VARCHAR(255) 
);

parentId自己参照外部キーです。

ここで、ノード ID を取得し、そのノードとそのすべての親を含む結果セットを返すストアド プロシージャを作成したいと考えています。

たとえば、テーブルが次のデータで満たされているとします。

1, null, 'root'
2, 1   , 'level_1'
3, 2   , 'level_2'

ここで、ノード 3 (ノード 1 と 2) のすべての親ノードを取得し、すべてのツリー レコードを含む結果セットを返したいと考えています。誰でも私を助けてもらえますか?

4

5 に答える 5

3

良い質問。Oracle では、CONNECT BYなどを使用します。

MySQL を使用しているため、そのクエリに効率的に回答できるようにデータ構造を変更することをお勧めします。ここにいくつかのアイデアがあります。

于 2010-04-07T18:13:19.200 に答える
1

「単一パスの取得」の下を参照してください。ただし、ネストされたセットアプローチを使用すると、ツリーの操作がはるかに簡単になります。また、「データベース内のツリー-高度なデータ構造」のプレゼンテーションを読むことをお勧めします。

于 2010-04-11T09:48:03.050 に答える
1

考えるべき具体化された道もあります。本当にデータベースにとらわれない非常に単純な概念。ネストされたセットとは対照的に、挿入などの管理がはるかに簡単で、挿入する前に左/右ノードなどであることを知る必要はありません。

于 2010-04-12T23:58:54.820 に答える
1

これと同様の議論があり、この問題の解決に役立つ可能性があります。

ルート ノード (親ノードが null) に到達するまでデータを再帰的に取得することで、この問題に対処できると思います。最初はストアド プロシージャの外でこれを行う傾向があったかもしれませんが (検索された行の親が null になるまで繰り返し呼び出します)、ここで参照したページの「クロージャ テーブル」ソリューションは優れたソリューションのように見えます。

于 2010-04-07T18:20:37.920 に答える