laravel - 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 字段中的对象数组中的特定字段并计算?
解决方案
我只是解决它
->select(DB::raw("JSON_UNQUOTE(JSON_EXTRACT(info, '$[*].cost')) as cost"))
希望它也能帮助其他人。
推荐阅读
- haskell - 如何在 Haskell 中多次强制评估相同的值?
- c++ - LNK2019 错误:无法解析的外部符号
- asp.net - 使用 REST api 在 azure devops 项目中搜索代码
- javascript - 链接按钮到同一页面中的标题
- java - 使用 Maven 部署 AWS 无服务器应用程序时如何设置文件的文件权限
- python - 每年绘制数据帧值的频率
- linux - 使用 kubectl,如何检索容器映像中安装的软件包列表?
- angular - build prod 上的 Angular firebase UI 错误如何解决?
- php - PHP 搜索 / 考虑多个输入的最佳结果 / Ingore 空输入
- python - 如何使用python将绘图图保存为excel表作为图像?