6

いくつかの項目とそのプロパティをキーと値のペアの形式でデータベース (mySQL) に保存する必要があります。以下のように行う予定です。

2 つのテーブルitemsとを使用しますitem_properties

items

アイテム ID | 項目名
-------------------
 1923年 | 交流
 1235 | 冷蔵庫
 8273 | ヒータ

item_properties

アイテム ID | プロパティ | 価値
--------------------------------
 1923年 | 効果 | 冷却
 1923年 | 消費 | 効率的
 1923年 | タイプ | スプリット
 1235 | 効果 | 冷却
 1235 | ボリューム | 20リットル
 8273 | 効果 | 暖房
 8273 | 消費 | 効率的
 8273 | heat メソッド | コイル

ここで、「効果」が「冷却」であるアイテムを選択する必要がある場合は、次のクエリを使用して選択できます (結果として「AC」と「冷蔵庫」が得られます)。

SELECT itemName FROM アイテム i、item_properties p
WHERE i.itemId=p.itemId
AND (p.property = '効果' AND p.value ='冷却');

次のような複数のプロパティに一致するアイテムを選択するクエリを作成する方法を知りたい

  • 「効果」が「冷却」で「消費」が「効率的」であるすべてのアイテムを選択します (これはアイテム「AC」に一致します)。
  • 「type」が「split」または「heatMethod」が「coil」または「consumption」が「effecient」であるすべての項目を選択します (項目「AC」および「Heater」に一致します)。

親切に助けてください...よろしくお願いします!!

4

2 に答える 2

9

クエリの例を次に示します。

SELECT
  itemName
FROM
  items i,
JOIN
  item_properties effect
  ON i.itemId = effect.itemId AND effect.property = 'effect'
JOIN
  item_properties consumption
  ON i.itemId = consumption.itemId AND consumption.property = 'consumption'

WHERE effect.value = 'cooling' AND consumption.value = 'efficient';

oRクエリは、自分で試すことができるものとして残します。単純にテーブルを追加して、 の代わりに使用するだけORです。ANDWHERE

于 2010-11-26T18:53:27.043 に答える
2

ご挨拶!

元のクエリはおそらく正しくないと思います。item_properties テーブルに (itemId、property、value) という名前の列がある場合、クエリは次のようになります。

SELECT i.itemName FROM items i, item_properties p 
WHERE i.itemId=p.itemId AND p.property='cooling';

また、ここで「暗黙の結合」を行っています。SQL についてどれだけ学びたいのか、何かを機能させたいだけなのかわかりませんが、おそらくクエリを作成する別の方法があると思いますしばらくの間 S​​QL データベースを使用する予定がある場合は、これをお勧めします。大したことではありませんが、2 番目の形式の方が読みやすいというだけです。

元のクエリ:

SELECT itemName FROM items i, item_properties p 
WHERE i.itemId=p.itemId AND p.property='cooling';

結合構文を使用して次のように書き直されます。

SELECT i.itemName FROM items i 
JOIN item_properties p ON i.itemId=p.itemId WHERE p.property='cooling';

私はあなたの質問に答えるために両方の形式を与えようとします...

「効果」が「冷却」で「消費」が「効率的」であるすべてのアイテムを選択します (これはアイテム「AC」に一致します)。

select itemName FROM items i, item_properties p 
WHERE i.itemId=p.itemId AND (p.property='cooling' AND p.value='consumption');

select i.itemName FROM items i JOIN item_properties p ON i.itemId=p.itemId 
WHERE p.property='cooling' AND p.value='consumption';

「type」が「split」または「heatMethod」が「coil」または「consumption」が「effecient」であるすべての項目を選択します (項目「AC」および「Heater」に一致します)。

select itemName FROM items i, item_properties p 
WHERE i.itemId=p.itemId AND ((p.property='type' AND p.value='split') OR 
(p.property='heatMethod' AND p.value='coil') OR 
(p.property='consumption' AND p.value='efficient'));

select itemName FROM items i JOIN item_properties p ON i.itemId=p.itemId 
WHERE (p.property='type' AND p.value='split') OR 
(p.property='heatMethod' AND p.value='coil') OR 
(p.property='consumption' AND p.value='efficient');

それが役立つことを願っています!

于 2010-11-26T19:06:12.253 に答える