列actions_serialized包含以下值:
一个:7:{S:4:"类型&#34 ;; S:40:" salesrule / rule_condition_product_combine&#34 ;; S:9:"属性&#34 ;;Ñ S:8:"操作&#34 ;; N; S:5:"值&#34 ;; S:1:" 1&#34 ;; S:18:" is_value_processed&#34 ;; N; S:10:"聚合&#34 ;; S:3:"任何&#34 ;; S:10:"条件&#34 ;;一个:3: {I:0;一个:5:{S:4:"类型&#34 ;; S:32:" salesrule / rule_condition_product&#34 ;; S:9:"属性" S:3:"的 SKU &#34 ;; S:8:"操作&#34 ;; S:2:" ==&#34 ;; S:5:"值&#34 ;; S:17:"的 SKU-ABC1 &#34 ;; S:18:" is_value_processed&#34 ;; b :0;} I:1;一个:5:{S:4:"类型&#34 ;; S:32:" salesrule / rule_condition_product&#34 ;; S:9:"属性& #34 ;; S:3:"的 SKU &#34 ;; S:8:"操作&#34 ;; S:2:" ==&# 34 ;; S:5:"值&#34 ;; S:76:"的 SKU-ABC203 &#34 ;; S:18:" is_value_processed&#34 ;; 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
答案 0 :(得分:0)
这应该适用于CONCAT。
SELECT
sr.id,
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)) AS skus
FROM salesrule sr
GROUP BY sr.id