【问题标题】:MySql select, get multiple occurances of a stringMySql select,获取一个字符串的多次出现
【发布时间】: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


    【解决方案1】:

    这应该适用于 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
    

    【讨论】:

    • 错误代码:1064。您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 3 行的 'distinct substring(sr.actions_serialized, locate('sku', sr.actions_serialized' 附近使用正确的语法
    猜你喜欢
    • 2017-01-04
    • 1970-01-01
    • 1970-01-01
    • 2011-04-03
    • 2020-10-25
    • 2014-03-04
    • 2017-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多