数据表一个字段多个值的取值问题

数据库数据表某个字段的内容如下

 a:1:{s:4:"sale";a:3:{s:10:"enoughfree";i:1;s:11:"enoughorder";d:696969;s:11:"enoughareas";s:0:"";}}

PHP文件取值代码如下

 'by' => (!(empty($goods['detail_by'])) ? $goods['detail_by'] : $shop['set'])

取得的值是整个字段的值,问PHP代码要怎么写,才能只取696969这个值呢

这是什么数据格式。没看懂

补充:数据库实现时,这个地方少了个‘set’:

if(location < 1 or str is null or str = '' or split = '') then
set result = '';
else

  1. 以下是通过java语言实现,php中可以使用类似方法进行替换:

    String a = "a:1:{s:4:\"sale\";a:3:{s:10:\"enoughfree\";i:1;s:11:\"enoughorder\";d:696969;s:11:\"enoughareas\";s:0:\"\";}}";
    
    // 使用正则表达式查找
    Pattern pat = Pattern.compile("d:\\d{6,}+;");
    Matcher mat = pat.matcher(a);
    while (mat.find()) {
        System.out.println(mat.group());
    }
    
    // 若字符串格式定长,可使用如下方法
    System.out.println(a.split(";")[4]);
    
    // 若数字定长,可使用如下方法
    System.out.println(a.substring(a.indexOf("d:"), a.indexOf("d:")+9));
    
  2. 可自定义数据库函数,查询时直接获取指定字符串数值:

/* 参数说明:str 待解析字符串;split 分隔符;location 待获取字符中分隔符位置 */
create function getSpecialStr(str varchar(300), split char(2), location int(2))
returns varchar(32)
begin
-- 最终结果
declare result varchar(32) default '';
-- 第一次截取字符串结果
declare firstInd varchar(300) default '';
-- 第二次截取字符串结果
declare secondInd varchar(300) default '';

-- 判断传入参数
if(location < 1 or str is null or str = '' or split = '') then
    result = '';
else    
    set firstInd = substring_index(str, split, location);
    set secondInd = substring_index(str, split, location-1);
    set result = substr(firstInd, length(secondInd), firstInd);
end if;

return result;

end;

取出来,先反序列化然后再取值