2012-03-14 11 views
0

特定の親からすべての子(およびオプションでそれらのレベルの深さ)を取得したいと思います。また、可能であれば、私は単一のクエリまたはストアプロシージャで取得したいと思います。mysql内の特定の親からすべての子を取得

Mark Byersのthis solutionのようなものは、逆方向のみです。

私のテーブルの構造は次のようである:1のために子供をしたい場合、私は買ってあげるそう

id  parent 
1  0 
2  1 
3  0 
4  1 
5  2 
6  5 
7  2 
8  4 

+2 
++5 
    +++6 
++7 
+4 
++8 

を私が買ってあげる2人の子供が欲しい場合:

++5 
    +++6 
++7 

4歳の子供が欲しい場合は、

+8 

ありがとうございます!

EDIT 1:入れ子集合モデルは

+0

どこuはから1,4を取得R?私はどのようなcolのurを参照することを意味.. – Teja

+0

@ SOaddictそれはidの列です –

+0

このリンクを試すhttp://stackoverflow.com/questions/16391660/retrieve-hierarchy-from-a-table-like-this/16392049#16392049 – Meherzad

答えて

0

1つの提案は、この隣接モデルを捨てると、ネストされたセットにあなたの構造を変更することです私には良いではありません。ネストされたセットは素早く選択するのに適しており、再帰構造の必要性を取り除きます。しかし、それは価格で来る、挿入、更新と削除がより痛いです。私は少し前にblogの投稿を書いていましたが、それはMsSqlベースですが、簡単にMySqlに移植されます。 Googleはまたthrows upいくつかの良い記事。

もう1つの方法として、データベースからすべての行をロードし、フロントエンドコードに再帰的メソッドを書き込んで出力をキャッシュする方法があります。テーブルに数百行しかない場合は、このアプローチを使用します。

+0

ありがとうございますが、ネストされたセットはいいです –

+1

私の意見では、ネストされたセットは、使用中のDBMSが再帰クエリをサポートしていない場合にのみ必要です。 –

+0

大きなレコードセットを持っているのでパフォーマンスに本当に関心がある場合は、IMOネストセットが勝ちです。それは間違いなく貧弱な回避策ではありませんか? – Rippo

-3

次のクエリは、MySQLのテーブルのすべての子テーブルを提供します。

与えるデータベース名とテーブル名をパラメータとして

SELECT TABLE_NAME, 
     COLUMN_NAME, 
     CONSTRAINT_NAME, 
     REFERENCED_TABLE_NAME, 
     REFERENCED_COLUMN_NAME 
FROM 
     INFORMATION_SCHEMA.KEY_COLUMN_USAGE 
WHERE 
     REFERENCED_TABLE_SCHEMA = "database" 
AND REFERENCED_TABLE_NAME = "table"; 
関連する問題