MySQL 查询以获取产品变型
MySQL query to fetch product variants
我正在尝试获取产品变体属性以显示在产品页面上。我想要以下输出:
color: red (size: S, M), green (size: S)
但我得到:
color: red, green
size: S, M
这是我目前拥有的简化版本:
产品 TABLE
|编号 |
--------------
| 1 |
| 1 |
| 1 |
变体 TABLE
|编号 |fk_product_id|
--------------------------
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
属性 TABLE
|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
我正在尝试获取产品变体属性以显示在产品页面上。我想要以下输出:
color: red (size: S, M), green (size: S)
但我得到:
color: red, green size: S, M
这是我目前拥有的简化版本:
产品 TABLE |编号 | -------------- | 1 | | 1 | | 1 |
变体 TABLE |编号 |fk_product_id| -------------------------- | 1 | 1 | | 2 | 1 | | 3 | 1 |
属性 TABLE |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