2012-01-31 11 views
1

MySQLのみを使用してクエリ/関数を記述すると、次の結果が得られますか?再帰的にテーブルの合計を取得しようとしています

例表:

 
+------------+ 
| ID | Child | 
+------------+ 
| 1 | 2  | 
| 1 | 3  | 
| 2 | NULL | 
| 3 | 4  | 
| 4 | 5  | 
| 4 | 6  | 
| 5 | NULL | 
| 6 | NULL | 
| 7 | NULL | 
+------------+ 

例の結果:平易な英語で

 
+------------+ 
| ID | Child | 
+------------+ 
| 1 | 5  | 
| 2 | 0  | 
| 3 | 3  | 
| 4 | 2  | 
| 5 | 0  | 
| 6 | 0  | 
| 7 | 0  | 
+------------+ 

:各IDのCOUNTとそのすべての子...と子供たち。

 
1's children are: 2, 3, 4, 5, 6 
3's children are: 4, 5, 6 
4's children are: 5, 6 

私はそれはSUM(COUNT(CHILD))、その後、サブクエリ/機能/グループ化のいくつかの巧妙な使用に関係していると想像します。

+1

参考:http://stackoverflow.com/questions/2191847/sql-cteを-counting-childs-recursion – Ara

+1

Araのリンクされた回答に関連するMySQLで "with"を使用する:http://stackoverflow.com/questions/1382573/how-do-you-use-with-clause-in-mysql –

答えて

1

あなたはこれを好きですが、(はい、それは、申し訳ありません長いです:P)は、このarticleを見てみるつもりはない

+0

残念ながら彼らはlft列とrgt列を使って "トリック"を使用しています。私はちょうど2つの列でこれを解決することを望んでいます。 –

+1

うーん... AFAIKそれはちょうど不可能です。あなたはそれらのすべてのサブクエリを作成することができます子供の固定小額の量を持っている場合は、そのように解決することができます。しかし、それは深さの多くのレベルになると、MySQLは再帰的なクエリをサポートしていないので、あなたはそれを解決することができるとは思わない。しかも、1列だけ追加するだけのオーバーヘッドはあまりありません:) –

+0

あなたの応答は、私が知る限り、正確なものです。つまり、新しいMySQL APIで再帰関数/プロシージャを作成することができない限り...? –

関連する問題