2012-03-08 1 views
-1

私は再帰的に例えば依存関係によってチェックするための最良の方法を知りたい3列* ID、ITEM_ID、依存関係*データベースを再帰的に検索するにはどうしたらいいですか?

とMySQLのテーブルiはITEM_ID 3の依存関係をチェックしていますし、それがITEM_ID 2私を必要と言っていItem_ID 2の依存関係をチェックする必要があります

これをPHPで実現する最も良い方法は何ですか?

ID | Item_ID | Dependency | 
---+---------+------------+ 
1 | 3  | 2   | 
---+---------+------------+ 
2 | 2  | 4   | 
---+---------+------------+ 
3 | 2  | 5   | 
---+---------+------------+ 
+1

依存関係がnullになるまで続行しますか?あなたの退室条件は何ですか? –

+1

これは何度も依頼されています。単にstackoverflowやgoogleで検索してください。 – Basti

+0

はまた、自己参照列(つまり、同じテーブルのID)に依存します。rは異なるテーブルを指していますか? – prodigitalson

答えて

0

擬似コードは:あなたが依存関係を持っていないアイテムに達するまで

func myQuery(item_ID) { 
    query (item_ID) 
    if (!item_ID.dependency()) 

    else (myQuery(item_ID.dependency()) 
} 

これは、列を下に続けます。

処理の要約:最初の項目を関数に渡します。それが依存関係を持っているかどうかをチェックし、存在する場合は、その依存関係を使って関数を再度呼び出します。それ以外の場合は何もせずに関数が戻ります。もちろん、クエリによって返されたアイテムを保存したいと思うでしょうが、私はそれをあなたに任せます。関数の最後にそのステートメントが必要なので、すべてのことが言われて実行されると、依存関係からほとんどの依存関係にデータが順序付けされます。純粋なSQLソリューションの

0

あなたは表で表さ階層のトラバーサルを実行し、1つのクエリでデータを返すために探している場合は、LEFT OUTERのシリーズを使用することができますが、テーブルに対して文を登録しよう関係を「歩く」 - これは指定された深さまで作用します(JOINSの数=ツリーの深さ)。次に、この大規模結合テーブルからどのデータを投影(SELECT)するかを決定する必要があります。

関連する問題