3

こんにちは、MySQL クエリについて質問があります。

次の表があります。

              product_properties             <-- table name
+------------------------------------------+    
|  id  |  property  |  value  | productid  | <-- field names
+------------------------------------------+
|   1  |  example   |    230  |         3  | +-- rows
|   2  |  power     |    110  |         3  | |
|   3  |  voltage   |    1.2  |         4  | |
|   4  |  example   |    240  |         4  | |
|   5  |  example   |    320  |         6  | |
|   6  |  power     |    100  |         4  | |
|   7  |  power     |    110  |         6  | +
+------------------------------------------+

フィルタ クエリを作成したいと考えています。例えば:

'230' と一致する 'example' を含むすべての製品を見たいとします。これは1つのアイテムを返します、私は使用しています:

SELECT * FROM product_properties WHERE property='example' AND value='230';

それは簡単でしたが、「230」に一致する「例」と「110」に一致する「電力」を含むすべての製品を表示したいと思います。

私は次のことを試しました:

SELECT * FROM product_properties WHERE property='example' AND value='230' AND property='power' AND value='110';

SELECT * FROM product_properties WHERE property='example' AND value='230' OR property='power' AND value='110';

最初のクエリの問題は、空が返されることです。2 番目のクエリの問題は、プロパティ 'example 230,240,320' を持つ製品も返されることです。

私の質問は、これを使用する最善の方法は何ですか、または動的な製品プロパティ テーブルを作成するべきではありませんか?

4

2 に答える 2

3

または (両方のケースが 1 つのレコードに一致しないため) のいずれかでフィルター処理し、両方がhaving句に一致するプロパティを見つける必要があります。

SELECT product_id 
FROM product_properties 
WHERE property='example' AND value='230' 
OR property='power' AND value='110'
group by product_id
having count(distinct property) = 2
于 2013-01-07T22:41:40.600 に答える
0

試す:

SELECT *
  FROM product_properties
 WHERE ( property='example' AND value='230' )
   OR  ( property='power' AND value='110' );
于 2013-01-07T22:40:41.693 に答える