THINKPHP5 UNION查询

本文介绍了在ThinkPHP5中进行UNION查询时的注意事项,包括保持各表列数和名称一致、处理特殊列、加入JOIN操作、使用UNION ALL以及如何处理不同表的特殊字段。

注意事项:
1.需要保持每个表的列必须数量和名称都一致
2.$fields保存公共的列,特殊列处理直接在每个表的field实现
3.如果需要join其他表查询,在最后的循环里处理
4.union的第二个参数是true,表示使用union ALL
5.因为需要列数一致,把每个表的特殊字段放到extend里面,然后循环处理

	//union列表
    function getMixedList(){
        $pageNum=10;
        $page=$this->request->get('page');
        if(!$page){
            $page=1;
        }

        //根据搜索条件设置$map
        $map=array();
        $city=$this->request->get('city');
        if($city){
            $map['area_id']=$city;
        }

        //这是公共列
        $fields=['id','weigh','createtime','area_id','logoimage','user_id'];
        $applys = model('applys')->field([implode(',',$fields),"'apply'"=>'type','name','concat(type,"-",applys_type_id)'=>'extend'])->where($map)->where('status="1"')->buildSql();
        $huodong = model('huodong')->field([implode(',',$fields),"'huodong'"=>'type','title'=>'name',"price"=>'extend'])->where($map)->where('vertify="1"')->buildSql();
        
        $news = model('news')->field([implode(',',$fields),"'news'"=>'type','title'=>'name',"'none'"=>'extend'])->where($map)->where('status="1"')->buildSql();


        $list = Db::table($applys . ' list')->union($huodong,true)->union($news,true)->page($page,$pageNum)->order('weigh desc,createtime desc')->select();
        foreach ($list as $key => $i) {
            //循环处理,例如join的内容
            $list[$key]['area']=model("area")->field('name,shortname')->find($i['area_id']);

            if($i['type']=='apply'){
                //处理apply的扩展元素
                $extend=explode('-',$i['extend']);
            }
        }
        $this->success(200,$list);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值