1

idparent、およびnameフィールドを持つカテゴリテーブルがあります。フィールドを使用すると、カテゴリを別のカテゴリのサブカテゴリにすることができます。

2 つのメイン カテゴリ (WIDGETS と THINGAMABOBS) があり、WIDGETS には 3 つのサブカテゴリがあるカテゴリテーブルの例:

  • ID 1、 null名前「WIDGETS」
  • ID 2、 1名前「GADGETS」
  • ID 3、 1名前「DOOHICKEYS」
  • ID 4、 1名前「GIZMOS」
  • ID 5、 null名前「THINGAMABOBS」

カテゴリフィールドを持つ製品テーブルがあります

製品が「GIZMOS」カテゴリにリンクされている製品レコードの例:

  • id 1、カテゴリ4、name Contraption 5000

SELECT ステートメントでカテゴリ名を指定して、そのカテゴリに含まれるすべての製品を取得できるようにしたいと考えています。しかし、「GIZMOS」で上記のレコードを検索したいだけでなく、MEDIUM WIDGET は WIDGET の子であるため、「WIDGET」という名前でも検索できるようにしたいと考えています。これは、無制限の数のレベル (つまり、サブサブサブカテゴリ) で機能するはずです。

これをさらに複雑にするために、製品を複数のカテゴリに割り当てることができるようにしたいと考えています。おそらくそれらはコンマで区切られますか?例: からくり 5000 を Doohickeys と Thingamabobs のカテゴリに含めたい場合は、カテゴリフィールドに 3.5 を入力します。

単一の選択ステートメントで私が求めていることは可能ですか?

4

2 に答える 2

1

私はあなたの質問の最後から始めます:

これをさらに複雑にするために、製品を複数のカテゴリに割り当てることができるようにしたいと考えています。おそらくそれらはカンマで区切られますか?例: からくり 5000 を Doohickeys と Thingamabobs のカテゴリに含めたい場合は、カテゴリ フィールドに 3.5 を入力します。

これを行うと、多対多の関係が作成されます。この場合、次のproducts_categories2 つの列を保持する 3 番目のテーブルが必要にproduct_idなりcategory_idます。category商品テーブルから列を削除します。

id=1 の製品をカテゴリ 3 と 5 に属するようにするには、products_categories に 2 つの行を作成します。

product_id | category_id
------------------------
1          | 3
1          | 5

さて、あなたの質問の最初の部分に...

あなたがする必要があるのは、再帰クエリを作成することです.SQL Serverで実行できることはわかっていますが、正直なところ、MySQLで実行できるかどうかはわかりません. もしそうなら、他の誰かがあなたに適切な答えを思いつくと確信しています.

于 2012-11-29T21:11:26.967 に答える
1

アプリケーション コードでこれを実行してください。メンテナンスがはるかに簡単で簡単になります。

この類似の投稿も参照してください(実際、このトピックに関する投稿は多数あります) 。

于 2012-11-29T21:06:59.407 に答える