MySql选择,获取字符串的多次出现

时间:2016-03-04 20:20:15

标签: mysql select substring locate

列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

1 个答案:

答案 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
相关问题