【发布时间】:2016-06-18 17:41:12
【问题描述】:
列 actions_serialized 包含以下值:
a:7:{s:4:"type";s:40:"salesrule/rule_condition_product_combine";s:9:"attribute";N;s:8:"operator";N;s:5: "值";s:1:"1";s:18:"is_value_processed";N;s:10:"聚合器";s:3:"any";s:10:"条件";a:3: {i:0;a:5:{s:4:"type";s:32:"salesrule/rule_condition_product";s:9:"attribute";s:3:"sku" ;s:8:"operator";s:2:"==";s:5:"value";s:17:"SKU-ABC1";s:18:"is_value_processed" ;b:0;}i:1;a:5:{s:4:"type";s:32:"salesrule/rule_condition_product";s:9:"attribute";s:3:"sku ";s:8:"operator";s:2:"==";s:5:"value";s:76:"SKU-ABC203";s: 18:"is_value_processed";b:0;}i:2;a:5:}}}
现在我需要在单独的一行中获取所有 SKU。
所以我有以下查询,但它只返回 SKU 出现的第一个实例。
如何获取所有其他匹配项,然后如何将它们拆分为单独的行?
请注意,SKU 出现有时可能会加起来多达 10 个以上的 SKU。
select
sr.id,
group_concat(distinct substring(sr.actions_serialized,
locate('sku', sr.actions_serialized)+47,
locate(';s:18:"is_value_processed";b', sr.actions_serialized)-
locate('sku', sr.actions_serialized)-48)) skus
from from salesrule sr
group by sr.id
以上查询仅返回 SKU 的第一个实例。但期望的结果是:
id skus
1 SKU-ABC1
1 SKU-ABC203
如果不可能,那么至少:
id skus
1 SKU-ABC1,SKU-ABC203
【问题讨论】:
标签: mysql select substring locate