首页 > 解决方案 > mysql 变体到来自 sql 查询的列

问题描述

我有一个 mysql 表,它具有简化目的 sku,并且该 sku 有一组未知的属性值

skus
------
id, sku, qty
1, abc, 10
2, bvcc, 20

variantvalues
-------------
id, sku_id, variant_id, value
1, 1, 1, red
1, 1, 2, medium

variants
--------
id, name 
1, color
2, size
.....

EXPECTED RESULT
id, sku, color, size, qty
-------------------------
1, abc, red, medium, 10

我面临的挑战是,我是否可以进行查询,将数据作为 skus 列表提供给我,然后是它们的每个变体和变体值的列......这样,如果我添加了新的变体选项...... . 说,性别,变种表,它被归因于一个sku,那么会有一个新的列吗?

这个问题来自这个问题:Modeling Product Variants

标签: mysqlsqlpivotinner-joindynamic-pivot

解决方案


您正在描述一个动态枢轴。基本上,您需要使用 sql 查询动态生成查询字符串,然后执行它。

这是在 MySQL 中使用准备好的语句的一种方法:

set @sql = null;

select group_concat(distinct 
    'max(case when v.name = ''', name, ''' then vv.value end) as `', name, '`'
) into @sql
from variants;

set @sql = concat(
    'select s.id, s.sku, ',  
    @sql,
    ' from skus s
    inner join variantvalues vv on vv.sku_id = s.id
    inner join variants v on v.id = vv.variant_id
    group by s.id, s.sku'
);

prepare stmt from @sql;
execute stmt;
deallocate prepare stmt;

推荐阅读