2008-08-20 10 views
2

これが可能かどうかは分かりませんが、ピボットテーブルのカテゴリに入るのですが、私は賛否両論に目を通しています。フィールドが列であるユニオンテーブルを照会してください

カード、プロパティ、CardPropertyの3つの基本テーブルがあります。カードは同じプロパティを持ちませんし、同じプロパティに対して複数の値を持つことが多いため、私はカードテーブルに本当に大きな列構造を持たずに、データを格納するユニオンテーブルのアプローチを採用することにしました。

プロパティテーブルは、基本的なキーワード/値タイプテーブルです。したがって、キーワードATKとその値が割り当てられています。 "Sycnro"や "DARK"など、カードに複数の値を設定できるSpecialTypeという別のプロパティがあります

私がしたいのは、カードID、カードを与えるビューまたはストアドプロシージャを作成することです名前、および指定されたカードのResultSetの列とその値としてカードに割り当てられたすべてのプロパティー・キーワード。だから、理想的に私は、その結果は以下のように設定する必要があるだろう:

ID NAME     SPECIALTYPE 
1 Red Dragon Archfiend Synchro 
1 Red Dragon Archfiend DARK 
1 Red Dragon Archfiend Effect 

と私は私の結果、そのように集計できます。

は、私は単純に一緒に彼らのキーワードに基づいてプロパティを連結することであろうとしてもスリッカー推測するので、私は同様のResultSetを生成できます。それが実現可能かどうかはわからない..but

1 Red Dragon Archfiend Synchro/DARK/Effect 

を。

ヘルプme stackoverflow Kenobi!あなたは私の唯一の希望です。

答えて

0

データベース内の関連レコードを連結して連結しないでください。そのベストプラクティスではありません。

説明しているのは、ピボットテーブルです。ピボットテーブルはハードです。私は可能な限り避けることをお勧めします。

関連する行を読み込んでメモリ内で処理するのはなぜですか?これをやっている時間が多すぎるように聞こえるようには聞こえません...

0

1つのオプションは、プロパティがそうPropertyTypeは、持っている持っている場合:あなたは新しいプロパティ値を設定したい場合、

table cards 
integer ID | string name | ... (other properties common to all Cards) 

table property_types 
integer ID | string name | string format | ... (possibly validations) 

table properties 
integer ID | integer property_type_id | string name | string value 
foreign key property_type_id references property_types.ID 

table cards_properties 
integer ID | integer card_id | integer property_id 
foreign key card_id references cards.ID 
foreign key property_id references propertiess.ID 

その方法をそのタイプで検証することができます。 1つのタイプは、値の列挙を伴う「SpecialType」とすることができる。

1

関連が、値は値が別々の列に保管されていると、あなたの「特別な種類の」時間の頭を知ってい:
SQL query to compare product sales by month

は、そうでなければ、私は、ストアドプロシージャでカーソルでこれを行うだろうとかで変換をプリフォームビジネスレイヤーまたはプレゼンテーションレイヤー。SQLで

刺しあなたはすべてのケースを知っている場合:私は整数値を扱っていたときに

Select 
    ID,NAME 
    ,Synchro+DARK+Effect -- add a some substring logic to trim any trailing /'s 
from 
    (select 
     ID 
     ,NAME 
     --may need to replace max() with min(). 
     ,MAX(CASE SPECIALTYPE WHEN "Synchro" THEN SPECIALTYPE +"/" ELSE "" END) Synchro 
     ,MAX(CASE SPECIALTYPE WHEN "DARK" THEN SPECIALTYPE +"/" ELSE "" END) DARK 
     ,MAX(CASE SPECIALTYPE WHEN "Effect" THEN SPECIALTYPE ELSE "" END) Effect 
    from 
     table 
    group by 
     ID 
     ,NAME) sub1 
0

私は私のプロパティテーブルのタイプ/フォーマットを持っている、私は/キャストする方法を知っている方法は、評価。この問題に関係しているかどうかはわかりませんでした。

関連する問題