laravel如何使用union 链接多个sql查询pv和uv

代码示例: 

<?php

use Carbon\Carbon;
use Carbon\CarbonPeriod;
use Illuminate\Support\Facades\Schema;
use App\Models\ActionTrack;

public function getData(Request $request){
		$post = $request->all();
        $id = $post['id'];
        $queries = collect();
        $start_at = '2023-09-01';
        $end_at = '2029-01-01';
		$model = new ActionTrack();
		$queries = collect();
        $startDate = Carbon::parse($start_at)->startOfMonth();
		$endDate = Carbon::parse($end_at)->endOfMonth();
		$select = [
            DB::raw("(CASE WHEN model='channel_qrcode' and action_id=2 and model_id=$id THEN uid ELSE null END) as a1")
        ];
         //轮询
		foreach (CarbonPeriod::create( $startDate, '1 month', $endDate) as $month) {
			$t = $model->originTable ."_"  .$month->format('Ym');
			if (!Schema::hasTable($t)) {
				continue;
			}
			$query = DB::table("$t")->select($select);
			$queries->push($query);
		}
		//取出第一个作为查询对象,其他作为合并对象
		$unionQuery = $queries->shift();
		if(empty($unionQuery)) return null;

		$queries->each(function ($item) use ($unionQuery) {
			$unionQuery->unionAll($item);
		});
         	// 设置临时表,执行查询
		$resp = DB::table(DB::raw("({$unionQuery->toSql()}) as t"))->mergeBindings($unionQuery)->select(
			DB::raw('count(distinct a1) as uv'),
			DB::raw('count(a1) as pv')
		)
		->limit(1)
		->get()
		->map(function ($value) {return (array)$value;})
		->toArray();
        return $resp[0];

    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值