首页 > 解决方案 > Laravel Query - 在 JSON 列中的对象数组中提取特定字段并计算

问题描述

我只想获取 json 列中的特定字段并计算其值。json 列是一个对象数组

    [
       {
         "sku": "DT-ALD3-EA18", 
         "adId": 244077676726655, 
         "asin": "B07V3SSLN1", 
         "cost": 12, 
         "clicks": 0,
       },
       {
         "sku": "DT-ALF3-EA1F", 
         "adId": 24408767672665, 
         "asin": "B07V3SSLN7", 
         "cost": 0, 
         "clicks": 0,
       }
    ]

目前,我只是选择 json 列并将其循环并提取成本字段,将其推入数组并使用 php 的array_sum. 但它效率不高,因为我有一个非常大的表,并且在使用大间隔的日期范围时会导致内存限制错误。我的目标是提取所需的字段并进行计算。我试过了

        $orders = DB::table('performance_reports')
        ->select(DB::raw('sum("JSON_EXTRACT(`info` , '$[*].cost'")'))
        ->whereBetween('date',[$from,  $to])
        ->get()->toArray();

但是我得到了语法验证错误。

如何仅查询 mysql 的 json 字段中的对象数组中的特定字段并计算?

标签: laraveleloquentmysql-json

解决方案


我只是解决它

   ->select(DB::raw("JSON_UNQUOTE(JSON_EXTRACT(info, '$[*].cost')) as cost"))

希望它也能帮助其他人。


推荐阅读