mysql - MySQL 查询以获取产品变体
问题描述
我正在尝试获取产品变体属性以显示在产品页面上。我想要以下输出:
颜色:红色(尺码:S、M)、绿色(尺码:S)
但我得到:
颜色:红色、绿色尺寸:S、M
这是我到目前为止的简化版本:
产品表 | 编号 | ------------- | 1 | | 1 | | 1 |
变体表 | id |fk_product_id| -------------------------- | 1 | 1 | | 2 | 1 | | 3 | 1 |
属性表 |fk_variant_id| 房产 | 价值 | -------------------------------------- | 1 | 颜色 | 红色 | | 1 | 尺寸 | 小号 | | 2 | 颜色 | 绿色 | | 2 | 尺寸 | 小号 | | 3 | 颜色 | 红色 | | 3 | 尺寸 | 中号 |
$stmt=$db->prepare('SELECT
attribute.property AS property,
GROUP_CONCAT(DISTINCT attribute.value) AS value
FROM product
INNER JOIN variant
ON product.id=variant.fk_product_id
LEFT JOIN attribute
ON variant.id=attribute.fk_variant_id
WHERE product_id=:product_id
GROUP BY attribute.property');
$stmt->bindParam(':product_id',$product_id);
$stmt->execute();
$query=$stmt->fetchAll();
foreach($query as $row){
echo $row['property'].' '.$row['value'].'<br>';
}
解决方案
此查询应为您提供所需的结果。它有效地创建了每个属性 (color
和size
) 的表,并将它们加入到产品和变体中。
SELECT p.id AS product, c.value AS color, GROUP_CONCAT(s.value) AS sizes
FROM product p
JOIN variant v ON v.fk_product_id = p.id
LEFT JOIN attribute c ON c.fk_variant_id = v.id AND c.property = 'color'
LEFT JOIN attribute s ON s.fk_variant_id = v.id AND s.property = 'size'
GROUP BY product, color
输出
product color sizes
1 green S
1 red S,M
推荐阅读
- sql - 将查询的计数结果保存到变量中以用于 Access SQL 中的算术运算
- sql - 阻止 Excel 将长整数转换为科学计数法的 SQL 查询
- javascript - 如何仅向 html 画布上的某些元素添加淡入淡出效果
- c# - 如何在 sln 的 VS Code 中调试控制台 .NET Core 项目?
- java - IBM-ODM 8.10 构建自动化工具 - 部署到 RES 时出错
- arrays - Google Sheets, how to subtract one array from another?
- r - using apply within ifelse R data.table
- angular - Angular 全局错误处理程序没有看到错误 instanceof TimeoutError
- python - 如何在张量流中按类别查看准确度细分?
- r - 如何在地图中的一个邮政编码中着色,RStudio?