2013-01-07 34 views
3

嗨,我有一個關於MySQL查詢的問題。MySQL查詢在哪裏和多行上的AND

我有如下表:

   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 | + 
+------------------------------------------+ 

我想創建一個過濾器查詢。例如:

想要查看所有'example'與'230'匹配的產品。這將返回一個項目,是我使用:

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

問題與第一個查詢,它將返回空的,我明白了。第二個查詢的問題是 ,它返回的是屬性爲「230,240,320」的產品。

我的問題是什麼是最好的方式來使用或不應該創建一個動態的產品屬性表?

回答

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 
+0

非常感謝你的屬性! ! – rayrule

0

嘗試:

SELECT * FROM product_properties WHERE(屬性= '例如' AND值= '230')OR(屬性= '功率' AND值= '110');