对union的遍历运算
话不多说直接上硬核
下面展示一些 内联代码片
。
// 我们使用联合查询的时候,是为了将数据更好的组装在一起,具体不多做介绍,可以看代码内部的注释
// An highlighted block
$m_operation = M('OperatingReports');
$info = $m_operation->where($where)
->field('statistics_time,shop_id, sum(pay_amount) as pay_amount, 0 as cost,0 as succ_payed_amount,0 as browse_nums,0 as qudao')
->union(array('field'=>'statistics_time,shop_id,0 as pay_amount,sum(cost) as cost,sum(succ_payed_amount) as succ_payed_amount,sum(browse_nums) as browse_nums,1 as qudao','table'=>'wk_ztc','where'=>$where,'group'=>'statistics_time'))
->union(array('field'=>'statistics_time,shop_id,0 as pay_amount,sum(cost) as cost,sum(succ_payed_amount) as succ_payed_amount,sum(browse_nums) as browse_nums,2 as qudao','table'=>'wk_zuanzhan','where'=>$where,'group'=>'statistics_time'))
->union(array('field'=>'statistics_time,shop_id,0 as pay_amount,sum(cost) as cost,sum(succ_payed_amount) as succ_payed_amount,sum(browse_nums) as browse_nums,3 as qudao','table'=>'wk_super_recommend','where'=>$where,'group'=>'statistics_time'))
->union(array('field'=>'statistics_time,shop_id,0 as pay_amount,sum(expend_amount) as cost,sum(confirm_sk_amount) as succ_payed_amount,sum(browse_nums) as browse_nums,4 as qudao','table'=>'wk_taobao_customer','where'=>$where,'group'=>'statistics_time'))
->group('statistics_time')
->select();
// 打印$info得到如下结果
[{
"statistics_time": "2020-04-13",
"shop_id": "5",
"pay_amount": "1919.44",
"cost": "0.00",
"succ_payed_amount": "0.00",
"browse_nums": "0",
"qudao": "0"
}, {
"statistics_time": "2020-04-14",
"shop_id": "5",
"pay_amount": "1412.00",
"cost": "0.00",
"succ_payed_amount": "0.00",
"browse_nums": "0",
"qudao": "0"
}, {
"statistics_time": "2020-04-15",
"shop_id": "5",
"pay_amount": "6440.04",
"cost": "0.00",
"succ_payed_amount": "0.00",
"browse_nums": "0",
"qudao": "0"
}, {
"statistics_time": "2020-04-16",
"shop_id": "5",
"pay_amount": "5780.00",
"cost": "0.00",
"succ_payed_amount": "0.00",
"browse_nums": "0",
"qudao": "0"
}, {
"statistics_time": "2020-04-13",
"shop_id": "5",
"pay_amount": "0.00",
"cost": "462.30",
"succ_payed_amount": "1020.00",
"browse_nums": "83",
"qudao": "1"
}, {
"statistics_time": "2020-04-14",
"shop_id": "5",
"pay_amount": "0.00",
"cost": "417.78",
"succ_payed_amount": "390.00",
"browse_nums": "77",
"qudao": "1"
}, {
"statistics_time": "2020-04-15",
"shop_id": "5",
"pay_amount": "0.00",
"cost": "429.70",
"succ_payed_amount": "390.00",
"browse_nums": "82",
"qudao": "1"
}, {
"statistics_time": "2020-04-16",
"shop_id": "5",
"pay_amount": "0.00",
"cost": "436.54",
"succ_payed_amount": "950.00",
"browse_nums": "75",
"qudao": "1"
}, {
"statistics_time": "2020-04-13",
"shop_id": "5",
"pay_amount": "0.00",
"cost": "10.37",
"succ_payed_amount": "0.00",
"browse_nums": "7",
"qudao": "3"
}, {
"statistics_time": "2020-04-14",
"shop_id": "5",
"pay_amount": "0.00",
"cost": "19.69",
"succ_payed_amount": "1.00",
"browse_nums": "12",
"qudao": "3"
}, {
"statistics_time": "2020-04-15",
"shop_id": "5",
"pay_amount": "0.00",
"cost": "12.35",
"succ_payed_amount": "0.00",
"browse_nums": "9",
"qudao": "3"
}, {
"statistics_time": "2020-04-16",
"shop_id": "5",
"pay_amount": "0.00",
"cost": "18.42",
"succ_payed_amount": "0.00",
"browse_nums": "13",
"qudao": "3"
}, {
"statistics_time": "2020-04-13",
"shop_id": "5",
"pay_amount": "0.00",
"cost": "19.25",
"succ_payed_amount": "275.00",
"browse_nums": "0",
"qudao": "4"
}, {
"statistics_time": "2020-04-14",
"shop_id": "5",
"pay_amount": "0.00",
"cost": "0.00",
"succ_payed_amount": "0.00",
"browse_nums": "0",
"qudao": "4"
}, {
"statistics_time": "2020-04-15",
"shop_id": "5",
"pay_amount": "0.00",
"cost": "0.00",
"succ_payed_amount": "0.00",
"browse_nums": "1",
"qudao": "4"
}, {
"statistics_time": "2020-04-16",
"shop_id": "5",
"pay_amount": "0.00",
"cost": "0.00",
"succ_payed_amount": "0.00",
"browse_nums": "36",
"qudao": "4"
}]
// 用一个新的空数组存放处理后的数据,根据统计日期把相同的字段进行求和运算,其他运算同理
$data = [];
foreach ($info as $k => $v){
foreach ($info as $k2 => $v2){
if ($v2['statistics_time'] == $v['statistics_time']){
$data[$k]['statistics_time'] = $v2['statistics_time'];
$data[$k]['pay_amount'] += $v2['pay_amount'];
$data[$k]['cost'] += $v2['cost'];
$data[$k]['succ_payed_amount'] += $v2['succ_payed_amount'];
$data[$k]['browse_nums'] += $v2['browse_nums'];
unset($info[$k2]);
}
}
}
//对求和后的数据再进行处理,例如求百分率什么的
foreach ($data as $k => $v){
$data[$k]['spread_ratio'] = $v['cost']/$v['pay_amount'];
$data[$k]['invest_repay_rate'] = $v['succ_payed_amount']/$v['cost'];
$data[$k]['ppc'] = $v['cost']/$v['browse_nums'];
}
return $data;
// 打印$data
{
"statistics_time": "2020-04-13",
"pay_amount": 1919.44,
"cost": 491.92,
"succ_payed_amount": 1295,
"browse_nums": 90,
"spread_ratio": 0.25628308256575,
"invest_repay_rate": 2.6325418767279,
"ppc": 5.4657777777778
},
{
"statistics_time": "2020-04-14",
"pay_amount": 1412,
"cost": 437.47,
"succ_payed_amount": 391,
"browse_nums": 89,
"spread_ratio": 0.30982294617564,
"invest_repay_rate": 0.89377557318216,
"ppc": 4.915393258427
},
{
"statistics_time": "2020-04-15",
"pay_amount": 6440.04,
"cost": 442.05,
"succ_payed_amount": 390,
"browse_nums": 92,
"spread_ratio": 0.068640878006969,
"invest_repay_rate": 0.88225313878521,
"ppc": 4.8048913043478
},
{
"statistics_time": "2020-04-16",
"pay_amount": 5780,
"cost": 454.96,
"succ_payed_amount": 950,
"browse_nums": 124,
"spread_ratio": 0.078712802768166,
"invest_repay_rate": 2.088095656761,
"ppc": 3.6690322580645
}