我正在使用PHP的应用程序,需要根据数据库中存储的数据生成报告。数据每天都在大量增长,我需要能够在尽可能短的时间内提取不同update_at时间范围内的信息。 例如,考虑下表,
id order_id quantity amount price created_at updated_at
1 21 12 0.0258 0.00215 2019-10-17 01:45:17 2019-10-17 01:45:17
2 22 4 0.0026 0.00064 2019-10-17 01:45:17 2019-10-17 01:46:17
3 21 8 0.0092 0.00115 2019-10-17 01:46:31 2019-10-17 01:47:31
4 22 8 0.0336 0.00420 2019-10-17 01:46:31 2019-10-17 01:48:31
5 21 4 0.0280 0.00700 2019-10-17 01:47:47 2019-10-17 01:48:47
6 22 8 0.0160 0.00200 2019-10-17 01:47:47 2019-10-17 01:50:47
7 21 8 0.0120 0.00150 2019-10-17 01:46:31 2019-10-17 01:52:31
我需要从第一行开始以1分钟的间隔提取总数量,开始价格,结束价格,平均价格,最低价格和最高价格,以便我可以使用这种形式的东西:
[
['x'=>'1538778600000','y'=>[16,0.00215,0.00064,0.00140,0.00215]],['x'=>'1538778650000','y'=>[12,0.00115,0.00090,0.00115]],['x'=>'1538778700000','y'=>[20,0.00700,0.00412,0.00700]]
]
x
代表时间戳记中的strtotime()
。
我怎样才能最好地实现这一目标? 我正在考虑预处理记录并将它们存储在不同时间范围的不同表中。 到目前为止,我的循环还没有获得准确的信息。
$time = 60;
$interval = 0;
$y = [];
$z = [];
$array = [];
foreach ($db as $key => $value) {
if($key == 0){
$tnow = strtotime($value['updated_at']);
}
if(strtotime($value['updated_at']) <= $tnow){
$z['x'] = $value['updated_at'];
$z['y'] = $value['quantity'];
}
else{
array_push($y,$z);
$z = [];
$tnow = ($tnow+60);
continue;
}
}
array_push($y,$z);
我需要有关实现它的最佳方法的帮助,以及需要帮助的PHP代码段。