mysql查询以获取产品变体

lh80um4z  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(428)

我正在尝试获取要在产品页面上显示的产品变量属性。我想要以下输出:
颜色:红色(尺寸:s,m),绿色(尺寸:s)
但我得到了:
颜色:红色,绿色尺寸:s,m
这是我到目前为止得到的一个简化版本:

  1. PRODUCT TABLE
  2. | id |
  3. -------------
  4. | 1 |
  5. | 1 |
  6. | 1 |
  1. VARIANT TABLE
  2. | id |fk_product_id|
  3. ---------------------------
  4. | 1 | 1 |
  5. | 2 | 1 |
  6. | 3 | 1 |
  1. ATTRIBUTE TABLE
  2. |fk_variant_id| property | value |
  3. --------------------------------------
  4. | 1 | color | red |
  5. | 1 | size | S |
  6. | 2 | color | green |
  7. | 2 | size | S |
  8. | 3 | color | red |
  9. | 3 | size | M |
  1. $stmt=$db->prepare('SELECT
  2. attribute.property AS property,
  3. GROUP_CONCAT(DISTINCT attribute.value) AS value
  4. FROM product
  5. INNER JOIN variant
  6. ON product.id=variant.fk_product_id
  7. LEFT JOIN attribute
  8. ON variant.id=attribute.fk_variant_id
  9. WHERE product_id=:product_id
  10. GROUP BY attribute.property');
  11. $stmt->bindParam(':product_id',$product_id);
  12. $stmt->execute();
  13. $query=$stmt->fetchAll();
  14. foreach($query as $row){
  15. echo $row['property'].' '.$row['value'].'<br>';
  16. }

最后的游戏是这样的:

h7wcgrx3

h7wcgrx31#

此查询应提供所需的结果。它有效地创建每个属性的表( color 以及 size )并将它们与产品和变体结合起来。

  1. SELECT p.id AS product, c.value AS color, GROUP_CONCAT(s.value) AS sizes
  2. FROM product p
  3. JOIN variant v ON v.fk_product_id = p.id
  4. LEFT JOIN attribute c ON c.fk_variant_id = v.id AND c.property = 'color'
  5. LEFT JOIN attribute s ON s.fk_variant_id = v.id AND s.property = 'size'
  6. GROUP BY product, color

输出

  1. product color sizes
  2. 1 green S
  3. 1 red S,M

在dbfiddle上演示

相关问题