对union的遍历运算

对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
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值