2012-01-27 12 views
0

私は店舗の基礎となるデータベースを構築しています。 2つのテーブルがあります.1つは衣服用で、もう1つは標準サイズチャートを保持しています。衣料品は1つ以上のサイズで入手可能であり、サイズチャートには各サイズの衣服についていくつかの測定値が含まれています。設定データでテーブルを結合する

例サイズチャート表

id size waist chest hips height 
0 6  56  76  82  160 
0 8  60  80  86  162 
0 10  64  84  90  164 
0 12  68  88  94  166 
1 6  57  75  82  160 
1 8  61  79  86  162 
1 10  62  83  90  164 
1 12  63  87  94  166 

例衣類テーブル

garment_id garment_name garment_type size_chart available_sizes 
0   Boating Jacket jacket   0   8,10,12  
1   Polka Dot Skirt skirt   1   10,12 

私は何をしたい、私は私が午前問題がある

garment_id ... size_chart available_sizes size_chart.id size_chart.size  size_chart.(...) 
    0   ... 0   8,10,12  0     8 
    0   ... 0   8,10,12  0     10 
    0   ... 0   8,10,12  0     12 
    1   ... 1   10,12  1     10 
    1   ... 1   10,12  1     12 

を持つようにそれらを結合ですどのようにして私が集合(available_size)のすべての数字にmeasuの対応するエントリーを持たせるように参加するかrements ....

どのように私がこれを行うに最善の方法についての任意のアイデア/提案/アドバイスは本当に便利だろう!

ありがとうございました。

+0

お返事いただきありがとうございました!これを行うためのきちんとした方法のような縫い目があるので、私は@Eugen Rickの答えを最後にして、実際には認識していなかったより多くの機能を私に許可しました。投稿していただきありがとうございました。大変参考になりました。 –

答えて

2

例衣類テーブル

garment_id garment_name garment_type size_chart available_sizes 
0   Boating Jacket jacket   0   8,10,12  
1   Polka Dot Skirt skirt   1   10,12 

諸悪の根源です - 私の後に話すので:

私が欲しい場合は、私が今までに、単一DBフィールドに複数の情報を保存することはありませんそれらに別々にアクセスする。決して。より深刻なノートで

、あなたの代わりに

CREATE TABLE available_sizes (
    id INT PRIMARY KEY AUTO_INCREMENT, 
    garment_id INT NOT NULL, 
    INDEX(garment_id), 
    size_id INT NOT NULL, 
    INDEX(size_id) 
) 

ような何かをして、それを移入、garmentsテーブルからavailable_sizesフィールドをドロップしたいと思います。これにより、1つのサイズを売り切れにするのが簡単になります。テーブルにqty_in_stock INTを追加したり、同じサイズの衣類をすべて検索したりできます。

+0

LOL!それで、私は別々の行を作って、それぞれ、複合IDとサイズの複合プライマリキーを持つべきです。私は、重複を避けるために、実際の衣服情報(色名など)を別の表に書き込むことができます。 –

+0

私の編集を参照してください。私は色について確信が持てません(私はファッションの男ではありません)。もしあなたが "赤"を持っていればこれはアイデアかもしれませんが、 "木星赤"、 "火赤"、 "チェリーレッド" 、 "foo-red"のように、それらをテキストとして保存したいかもしれません。 –

+0

決して言わないでください。私がいつも聞いたような一般的なルールは、まず正規化してから、必要に応じて(スピードのために)最適化します。 – bnieland

0

動的SQL。メモリから、それはこのようsimethingされるだろう。今

declare @cmd varchar(1000) 

declare @id int 
select @id = 0 

declare @inVariable varchar(20) 
select @inVariable = NULL 

while(true) 
begin 
    select @inVariable = availables_sizes from garment where id = @id 

    if (@inVariable <> NULL OR @inVariable <> '') 
    begin 

     if(@id > 0) 
     begin 
      select @cmd = 
      ' UNION select g.garment_id, g.size_chart, g.availables_sizes, c.id, c.size 
      from garments g 
      inner join chart c on g.size_chart = c.id 
        and c.id = ' + convert(varchar, @id) + ' 
        and c.size in (' + @invariable + ')' 
     end 
     else 
     begin 
      select @cmd = 
      'select g.garment_id, g.size_chart, g.availables_sizes, c.id, c.size 
      from garments g 
      inner join chart c on g.size_chart = c.id 
        and c.id = ' + convert(varchar, @id) + ' 
        and c.size in (' + @invariable + ')' 
     end 

     select @id = @id + 1 
    end 
    else 
    begin 
     break 
    end 
end 

exec(@cmd) 

、@EugenRieckこれは悪であると述べたように!

0

すべての行にcross joinを使用してから、内のサブセクションを使用して、1つの列のサイズをリストすることができます。

+0

大丈夫、ありがとう。私もこれを見ます。 –

関連する問題