mysql EAV模型 - 如何选择堆叠的多个属性

时间:2012-11-12 18:20:53

标签: mysql entity-attribute-value

我有两列的表格:

  

product_id和attr_value_id

使用此查询,我得到39行:

  

SELECT *   来自ka_product_attributes   在哪里attr_value_id   IN(655,656,658)

使用此查询我得到58行:​​

  

SELECT *   来自ka_product_attributes   在哪里attr_value_id   IN(655,656,658,589)

如何选择所有具有attr_value_id 589和以下attr_value_id 655,656,658之一的product_id?

这样的事情:

  

SELECT *       来自ka_product_attributes       WHERE(attr_value_id       IN(655,656,658)       和attr_value_id       IN(589))       GROUP BY product_id       有COUNT(product_id)> 1

但这不会奏效。

1 个答案:

答案 0 :(得分:0)

因为EAV模型将单个记录(在传统关系模型下)的属性“扩展”到多个表行中,所以需要使用如下所示的自联接来基于多个属性搜索项目。 / p>

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).