MySql 过滤查询产品变体表

标签 mysql sql product variant

我需要按变体内容过滤产品,但我完全陷入困境,结构如下:

我有那 3 个表:

产品

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

产品变体

 ______ ___________
|  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      |

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

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

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

最佳答案

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

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

关于MySql 过滤查询产品变体表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36806676/

相关文章:

php - Mysql INSERT 查询插入零

MySQL 条件列响应

php - 通过 PHP 以编程方式备份​​(和通过电子邮件发送)完整的 MySQL 数据库

sql - SQLite SQL 中 Left 命令的替换

MySQL合并一些空值,而不是全部空值

sql - Oracle SQL 选择不在 GROUP BY 子句中的行

sql - 条件的放置重要吗?

wordpress - Woocommerce:获取所有 sku 产品的列表

php - Magento:根据客户群获取产品价格

javascript - 为什么我的 JavaScript 函数接受三个数组,但不接受包含三个数组的数组?