我需要按变体内容过滤产品,但我完全陷入困境,结构如下:
我有那 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/