【问题标题】:MySQL grouping different rows to create group and simple productsMySQL对不同的行进行分组以创建组和简单的产品
【发布时间】:2019-01-10 00:11:41
【问题描述】:

我正在将产品从一个系统迁移到 Magento,并且在旧系统中存在组/子产品关系,我必须在 Magento 系统中维护

我目前的表结构:

[id],   [sku],  [name],         [parent id]
202182 |240330 |parent product |
202183 |240331 |child product 1|[202182][Parent-Product-240330]
202184 |240332 |child product 2|[202182][Parent-Product-240330]

我想要达到的目标:

[id],   [sku],   [name],         [product_type], [associated_sku]
202182 |240330 | parent product |grouped        |240331=0.0000,240332=0.0000
202183 |240331 | child product 1|simple         |
202184 |240332 | child product 2|simple         |

请你帮我写一个查询来实现它。

【问题讨论】:

  • 层次结构是否只有两个级别,还是可以有更多?
  • 什么版本的 MySQL(或 MariaDB)? 5.x 还是 8.x?
  • 不幸的是 MySQL 5.x 没有实现“递归 CTE”。如果您使用的是 MySQL 8.x,我会编写一个查询来产生您的结果。在 MySQL 5.6 中,您需要在应用程序中组装数据(更多编程)。
  • 或者,如果您能以某种方式将当前数据导出/导入到 MySQL 8.x 数据库中,我/我们可以轻松为您提供帮助。
  • 让我看看,层次结构是否总是最多有两个级别(如您的示例中),还是可以有更多(孙子、曾孙)?

标签: mysql sql magento grouping


【解决方案1】:

如果层次结构只有两个级别,那么在 MySQL 5.6 中完全可以做到这一点,所以你很好(如果它有可变数量的级别,你将需要 MySQL 8.x)。

我会使用的查询是:

select 
  p.id,
  p.sku,
  p.name,
  'grouped' as product_type,
  group_concat (concat(c.id, '=0.0000') order by c.id) as associated_sku
from product p
join product c on c.parent_id = p.id
group by p.id, p.sku, p.name
union all
select
  id,
  sku,
  name,
  'simple' as product_type,
  null as associated_sku
from product
where parent_id is not null

注意:此查询假定父行上 parent_id 的值为 null。

【讨论】:

  • 感谢您的查询,它看起来很完美,但在连接中没有成功运行,我必须匹配此数据 c.parent_id ([202182][Parent-Product-240330]) = p.id (202182)这不起作用,因为我需要在查询中写 LIKE 例如: c.parent_id like concat('%',p.id,'%') 但我没有得到任何东西,不太确定我的 Like 语句是否错误.
  • 连接条件看起来不错。我不知道为什么它不匹配行。以下查询(刚刚尝试过)类似:select '[202182][Parent-Product-240330]' like concat('%', '202182', '%')。它确实有效,因为它返回1(又名“true”)。我建议您按部分运行查询来调试它;也许你可以只敲响前半部分,看看它发现了什么。
  • 有什么方法可以在不同的部分运行这个脚本?因为我在 PHPMyAdmin 和 SSH 中都运行它,它需要花费大量时间,比如几个小时,然后抛出系统超时错误,我尝试设置 Limit 1000,但它仍然做了同样的事情。
  • 嗯.. 你可以运行第一部分(在UNION ALL 之前),看看你得到了什么。然后你可以运行第二个(在UNION ALL 之后)。结果应该结合两个查询。
猜你喜欢
  • 1970-01-01
  • 2014-10-13
  • 2013-06-18
  • 1970-01-01
  • 2013-11-01
  • 1970-01-01
  • 2022-01-12
  • 2019-05-06
  • 2017-11-12
相关资源
最近更新 更多