2016-11-27 9 views
0

こんにちは私はテーブルを持つデータベースを持っています:products_colors、colors。SQLの選択親IDまたはID(親でない場合)の引数

製品属性を持っている:ID、名前は、...

Product_colorsは属性を持っている:ID、colors_id:ID、products_idは、属性を持っている

色をcolors_id 、名称

id  name 
------------------- 
1  produkt1 
2  produkt2 
3  produkt3 

Product_colors:

id  products_id  colors_id 
1  1    1 
2  1    5 
3  2    1 
4  2    3 
5  3    6 

products.id = product_colors.products_id とproduct_colors.colors_id = colors.id

製品間colors_idする次接続によって加入商品の色の行を有します色は親の色を持つことができます_id:

id  colors_id  name 
__________________________________ 
1  null   red 
2  null   green 
3  1    flashred 
4  2    kiwi 
5  2    lightgreen 
6  null   black 

レッド - > flashred、オレンジ

グリーン - >キウイ、ライトグリーン、

darkgreenどのように引数の色は赤で、場合、私は、(parametrとして)すべての親の色が含まれているすべての製品を得ることができますライトグリーン - >選択された製品は赤と緑の色を正確に持つ必要があります

私は引数の色の親を取得する必要があります(引数が親でない場合は引数の色を取ります)、この親色は選択配列の配列を使用して配列に与えます。私はMYSQL

SELECT products.id AS id 
     FROM products 
     LEFT JOIN product_colors 
      ON products.id = product_colors.products_id 
     LEFT JOIN colors 
      ON product_colors.colors_id = colors.id 
     WHERE colors.id IN (1,5) 

1,5にこれにしたい は[1,5]私は解決策が再び再参加が参加するID 1

+0

COALESCE()を参照してください。 – Strawberry

+0

期待される結果を共有してください。 –

+0

Kumar_Vikasはい私は例のテーブルを追加し、私は引数の色が欲しい:1,5 id 1の製品を得る – Petr

答えて

0

と結果の製品を取得したいの引数の引数

ですCOLORSテーブルに、親の色データを取得します。

LEFT JOIN colors PARENT_COLOR ON colors.colors_id = PARENT_COLOR.id 

次にあなたがこのテーブルからの結果を表示したり、フィルタリングするために、このPARENT_COLORテーブルを使用することができます。

あなたは別のものを持っている場合は、次のように参加します。

関連する問題