2011-12-15 6 views
0

をネストの複数のレベル:実用的な面ではつのメインカテゴリの下にすべてのサブカテゴリを引いて、以下の表でMySQLのセットアップ使用

categories | CATEGORY_ID 
categories_sub | CATEGORY_ID | SUB_CATEGORY_ID 

は、メニューの出力は次のようにネスト:

Products 
    Desks 
     Tables 
     Workstations 
    Chairs 

どの適切なレコードがcategoriesにあると仮定して、categories_subの次のSQLエントリによって表されます。

desks01 | products01 
    tables01 | desks01 
    workstations01 | desks01 
chairs01 | products01 

これらのことすべてが、サブ、サブサブカテゴリ、サブサブサブカテゴリのどの位までネストされていても、products01のすべての子をプルする単一のMySQLクエリを作成することは可能ですか?もしそうなら、それはどのように書かれますか?

+0

これらは私の実際のIDではなく、簡単に説明できるように簡略化されていることに注意してください。実際のIDは、以前の開発者から残された13文字の英数字のUNIQID()文字列です。 –

+3

Stackにはいくつかの例があります。http://stackoverflow.com/questions/5689635/need-help-with-hierarchical-mysql-queryその長短は、mySQLは階層クエリをサポートしていないため、何かを書く必要があります。 Oracleでは、事前に接続して使用します。 SQLサーバーDB2の使用http://stackoverflow.com/questions/959804/simulation-of-connect-by-prior-of-oracle-in-sql-server(with) – xQbert

+0

また、最近では「with」アプローチを使用することもできます市販のRDBMSを購入するよりも安価です。 – Sorpigal

答えて

0

以下の列を使用して構造を1つの表に変更してください

id |カテゴリ|親

の値として上位カテゴリのIDを使用して、構造体を取得するために再帰関数を見てみましょう。そのルートまたはトップレベルカテゴリが親値として「0」を使用する場合。

再帰関数は無限ループトラップである可能性があることを覚えておいてください - 常に最初の可能な点でそれらを終了してください!あなたのために関数を書くつもりはありませんが、一緒に手伝ってください - 再帰関数はそれ自身を呼び出します!

関連する問題