MySql过滤查询到产品变体表[重复]

Posted

技术标签:

【中文标题】MySql过滤查询到产品变体表[重复]【英文标题】:MySql filter query to product variant table [duplicate] 【发布时间】:2016-04-23 04:35:40 【问题描述】:

我需要按变体内容过滤产品,但我完全卡住了,结构如下:

我有这 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    |

好的... 因此,如果我需要获取所有 RED 产品,请执行以下查询:

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      |

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

已编辑! 我得到了解决方案,如果有人访问此页面,则使用此查询解决了问题:

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

【问题讨论】:

哦,编写 SQL 以使用 EAV 模型的乐趣……在关系模型中微不足道的事情变得困难了一个数量级。 您可以为每个内容值使用单独的连接路径。 PRODUCT_VARIANT_COLUMN 的两个连接,一个用于“红色”,另一个用于“小”。 *** 上已多次提出同样的问题。 可能重复:***.com/questions/12269135/… 要查找与 EAV 模型相关的 SQL 的其他问题,请在搜索中包含标签 entity-attribute-value。 【参考方案1】:

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

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

【讨论】:

您会认为就这么简单。但事实并非如此。有多少行,你认为究竟会满足这两个条件。如果condition 的值等于“红色”...相同的值等于“小”的可能性有多大?我给这大约 0.00% 的机会返回一行。 从技术上讲,它回答了措辞不佳的问题。看来 OP 实际上想要 OR

以上是关于MySql过滤查询到产品变体表[重复]的主要内容,如果未能解决你的问题,请参考以下文章

请教大家!mysql查询结果,过滤重复数据?

mysql左连接没有数据还会查出来吗

mysql查询时如何去除重复数据

MySQL多表联合查询过滤重复数据怎么写

Mysql 临时表 视图

MYSQL过滤表中某几个字段重复的数据