mysql - 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
解决方案
您正在描述一个动态枢轴。基本上,您需要使用 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;
推荐阅读
- javascript - 无法安装组件:未定义模板或渲染函数 - 使用 Laravel-mix 时出现 vue 警告
- php - 卡住试图获取 Instagram 显示图片链接
- c# - 如何在 Xamarin.Forms 中创建可扩展的多图像按钮查看器
- symfony - passwordEncoder 为非身份验证目的生成的哈希在验证时失败
- php - 使用 pastebin.com api 在文件夹内创建粘贴?
- lighthouse - 有没有办法使用 Chrome DevTools 协议运行 Lighthouse 审计?
- reactjs - 输入字段仍然保存数据
- ios - UIAlertController 失败后打开 UIActivityViewController
- javascript - 如果猜到一个,如何记录两个相同的字母
- python - 按索引删除numpy数组的元素