2009-03-07 6 views
2

私のデータは自然にツリーフォームに収まります。したがって、データを格納する単純なSQLテーブルがあります。{id、parentid、data1、...、dataN}サブツリー内のデータを要約するクエリ?

データを「ズームイン」し、現在のブランチの下にあるデータ。 つまり、ルートに立っているときは、すべてのデータの合計を取得したいと考えています。私がツリーの特定の枝を移動したとき、そのノードとその子ノードだけで見つかったデータの総和しか持たせたくありません。

このようなクエリをSQLに書き込む方法を教えてください。

ありがとうございます!

/ジョン・

答えて

2

sqliteCONNECT BYをサポートしていないので、あなたのデータのためのnested sets or materialized pathsを使用しない限り、あなたは、単一のクエリでこの計算を実行することはできません。

また、親の関心事から始まる各子ノードの1つのクエリを「再帰的に」行い、再帰的にツリーをたどります。

も参照してください:ネストされたセットの

+0

私は子供たちを再帰的にトラバースすることを考えていましたが、SQLによるすぐに使える解決策を望んでいました。 マテリアライズドパスについて読んだ後、私はすぐにそれが私の問題に完璧にフィットすると感じました!実装するのは簡単です:-)ありがとう! /John –

1

ヴラドの参照はかなりよさそうです。あなたが木と階層をより詳細にカバーするものを望むなら、Joe Celko's bookをチェックすることもできます。

"ID、ParentID"隣接リストモデルは、実際にはリレーショナルデータベースモデルの階層を見ている「古い時」の方法です。

関連する問題