MySql的过滤器查询到产品变型表

问题描述:

我需要的变种内容过滤产品,但我完全被卡住,结构如下:MySql的过滤器查询到产品变型表

我有这3个表:

产品

______ _________ 
| id | title | 
|------|---------| 
| 1 | Shirt | 
| 2 | Hood | 

PRODUCT_VARIANT

______ ___________ 
| id | product | 
|------|-----------| 
| 1 | 1  | 
| 2 | 1  | 
| 3 | 2  | 

PRODUCT_VARIANT_CONTENT

______ ___________ __________ __________ 
| id | variant | option | content | 
|------|-----------|----------|----------| 
| 1 | 1  | 1  | small | 
| 2 | 1  | 2  | blue  | 
| 3 | 2  | 1  | small | 
| 4 | 2  | 3  | red  | 
| 5 | 3  | 1  | small | 

好吧...
所以,如果我需要把所有的产品是红我执行以下查询:

SELECT 
    P.id, 
    P.`title`, 
    GROUP_CONCAT(PVC.content) AS content 
FROM 
    product P 
LEFT JOIN product_variant PV ON PV.product = P.id 
LEFT JOIN product_variant_content PVC ON PVC.variant = PV.id 
WHERE PVC.content = 'red' 
GROUP BY 
    P.id, PV.id 

它将返回:

______ ___________ _________ 
| id | title | content | 
|------|---------|-----------| 
| 1 | Shirt | red  | 

那没问题,我期待的结果是,但我需要同时获得所有小型和红色的产品,我不知道如何实现这一点,有人可以帮助我吗?

EDITED! 我得到了解决,如果有人访问此页面,这个问题是使用此查询解决:

SELECT 
    P.id, 
    P.`name`, 
    PVC1.content, 
    PVC2.content 
FROM 
    product P 
JOIN product_variant PV ON PV.product = P.id 
JOIN product_variant_content PVC1 ON PVC1.variant = PV.id AND PVC1.content = 'red' 
JOIN product_variant_content PVC2 ON PVC2.variant = PV.id AND PVC2.content = 'small' 

GROUP BY 
    P.id, PV.id 
+1

哦写SQL与EAV模型一起工作的乐趣......关系模型中的微不足道的事情会变得更加困难。 – spencer7593

+0

您可以为每个内容值使用单独的联接路径。两个连接到PRODUCT_VARIANT_COLUMN,一个用于'红',另一个用于'小'。 *上多次提出了同样的问题。 – spencer7593

+0

可能的重复:http://*.com/questions/12269135/mysql-eav-match-row-as-field-or-entitys-property-value要查找有关与EAV模型相关的SQL的其他问题,请包含标记您的搜索中的实体属性值。 – spencer7593

如果我理解正确的,这通过添加AND子句的WHERE语句来实现。如在,

WHERE PVC.content = 'red' AND PVC.content = 'small' 
+0

你会*想*这将是如此简单。但事实并非如此。有多少行,你认为会完全满足这两个条件。如果'condition'的值等于'red'...那么相同的值将等于'small'的可能性是多少?我给了这个约0.00%的机会返回一排。 – spencer7593

+0

从技术上讲,它回答了这个措辞不佳的问题。看来OP实际上想要OR –