2010-11-26 9 views
4

データベース(mySQL)のキー値のペアの形式でいくつかのアイテムとそのプロパティを格納する必要があります。私はそれを次のようにするつもりです。キー値のペアを格納するテーブルから選択するためのMySQLクエリが必要

2つのテーブルitemsitem_propertiesを使用します。私はその '効果' '冷却' で項目を選択する必要があれば今すぐ

 
itemId | property | value 
-------------------------------- 
1923 | effect  | cooling 
1923 | consumption | efficient 
1923 | type  | split 
1235 | effect  | cooling 
1235 | volume  | 20 liters 
8273 | effect  | heating 
8273 | consumption | efficient 
8273 | heatMethod | coil 

items

 
itemId | itemName 
------------------- 
1923 | AC 
1235 | Fridge 
8273 | Heater 

item_properties、私が行うことができます使用して、次のクエリ( '私を与えるであろう結果として「AC」と「冷蔵庫」)。

 
SELECT itemName FROM items i, item_properties p 
WHERE i.itemId=p.itemId 
AND (p.property = 'effect' AND p.value ='cooling'); 
私はその「効果」「の冷却」AND「消費」であるすべての項目を選択

  • のように複数のプロパティに一致する項目を選択するためのクエリを記述方法を知りたい

    は「効率的」である(これはアイテム 'AC'と一致します)。

  • 'type'が 'split'または 'heatMethod'が 'コイル'または '消費'が 'エフェクティブ'(アイテム 'AC'と 'Heater'に一致)のアイテムをすべて選択します。

ようこそ...ありがとうございます!ここで

答えて

7

はサンプルクエリです:

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クエリを残しておきます。 WHEREANDの代わりにORというテーブルを追加するだけです。

+0

ありがとう@WoLpH !! :)鮮明でシンプルな... – Goje87

2

おはようございます!私はあなたの元のクエリはおそらく適切ではないと思います

...あなたのitem_propertiesテーブルは、名前付き列(のitemId、プロパティ、値)を持っていれば、あなたのクエリは次のようになります。

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

また、あなたは暗黙の「やっていますここに参加する "と私は、あなたが何かを学びたいと思っているのか、SQLを学びたいのか分からないのですが、あなたの質問を書く別の方法があります。しばらくの間、SQLデータベースを使用します。それは大したことではない、ちょうど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'; 

は、その「タイプ」である「スプリット」OR 'heatMethod「コイル」OR「消費」である(アイテム「AC」と「ヒーター」と一致するであろう)「effecient」であるすべての項目を選択します。

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'); 

希望します。

+0

良い捕獲@extraplanetary。私は私の質問を修正して私の質問を修正しました。 – Goje87

関連する問題