2009-03-24 8 views
4

私はmysqlの質問があります。Mysql、可能なネストされたカテゴリの問題

私は、ColdfusionとMSSqlからPHP/Mysqlに移行するアプリケーションを持っています。

カテゴリとサブカテゴリがあります(サブカテゴリは無制限です)。

navigationIDが指定された商品テーブルのすべてのレコードを取得する最適な方法は何ですか。

私は対処している2つのテーブルがあります。 1つはProductsテーブル(--->に対応するnav_idを持つ)で、もう1つは親/子関係を含むカテゴリ関係テーブルです。

基本的に、2つのテーブルをクエリして、navigationIDに関連付けられたすべての製品とそのNavigationIDのサブカテゴリを生成する必要があります。

どのようなアイデアや指示がありますか?私はこれが行われなければならないことを知っています。答えはネストされたクエリの中にあると思っていましたが、私の頭の中でそれを囲むことはできません。

Nav_table -

ChildNavId  int(11) 
ParentNavId  int(11) 

Products_Tableが含まれています -

productNavID int(11) // productNavID contains the lowest level NavID 

答えて

4

カテゴリとサブカテゴリ(明らかに無制限のサブカテゴリがあります)があります。

これによって多くのカテゴリネストのレベルが任意にある場合、「親参照」スキーマモデルを使用してすべてのクエリを単一のクエリで取得することはできません。最も深くネストされたアイテムを取得するまで、見つかった各カテゴリの子を繰り返してクエリしたり、再帰的にクエリを実行したり、長くても長い自己結合を続ける必要があります。

  • Nested Setsを:あなたは、主に、スキーマを構成する別の方法を検討する必要があります階層データへの単一のクエリアクセスのために

    ツリー

  • を超える再帰的な散歩の数値順序を保存します:子/親ルックアップに余分な祖先/子孫ペアを追加します。

これらのアプローチのいずれか、または両方が、あなたのために機能します。 (私は通常ネストされたセットで終わるので、明示的に最初から最後の順序を得ることができます)

+0

私の答えには、より多くのネストされたセットモデルリソースへのリンクがあります:http://stackoverflow.com/questions/ 609328 /子供を選択するためのmysql-query-609924#609924 – nawroth

0

きちんと書かれた再帰アルゴリズムのための仕事のように聞こえるが、アレックス・テイラーは述べたように、我々は任意のものであることを、スキーマが必要になりますが含まれていますあなたに使ってください。

関連する問題