2012-11-12 41 views
0

我有表有兩列:MySQL的EAV模型 - 如何選擇多個屬性堆疊

的product_id和attr_value_id

與此查詢,我得到39行:

SELECT * FROM ka_product_attributes WHERE IN(655,656,658)

attr_value_id

與此查詢我得到58行:​​

SELECT * FROM ka_product_attributes WHERE attr_value_id IN(655,656,658,589)

如何選擇所有的product_id的已經attr_value_id 589及以下attr_value_id 655,656,658之一?

事情是這樣的:

SELECT * FROM ka_product_attributes WHERE(attr_value_id IN(655,656,658) 和attr_value_id IN(589)) GROUP BY PRODUCT_ID HAVING COUNT(產品)> 1

但是,這不會工作。

回答

0

由於EAV模型將單個記錄(在傳統關係模型下)的屬性「分散」爲多個錶行,因此需要使用如下的自連接來基於多個屬性來搜索項目。

SELECT DISTINCT A1.product_id -- see note about DISTINCT, below 
FROM ka_product_attribute A1 
JOIN Ka_product_attribute A2 ON A1.product_id == A2.product_id 
WHERE A1.attr_value_id = 589 
    AND A2.attr_value_id in (655, 656, 658) 

-- The 'DISTINCT' is only necessary if duplicates are allowed for values of the 
-- attribute 589. (in other words if ka_product_attributes can have several 
-- records with for a product_id + attr_value_id combination). 
+0

加入,當然!謝謝!我明天會嘗試它,因爲我必須從數組中動態地構建查詢,現在我太累了。 –

+0

phpmyadmin說可以! –