Laravel Query -提取JSON列中一组对象中的特定字段并计算

3mpgtkmj  于 2023-02-05  发布在  其他
关注(0)|答案(2)|浏览(136)

我只想获取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字段中只查询对象数组中的特定字段并进行计算?

insrf1ej

insrf1ej1#

我只是解决它

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

希望对其他人也有帮助。

luaexgnf

luaexgnf2#

这对我有用

->select('info->cost AS cost')

也要查询

->where('info->cost', '>', 0)

查看Laravel文档的更多信息

相关问题