TP框架分页源码使用问题

#筛选数据
public function search_user(){

	$assign = [];

	$where['_string'] = ' 1=1 ';  #必须,否则刚跳转到页面时无查询条件,会报错

	$having = ' 1=1 ';  #聚合函数条件



	if($_POST){

		$add_time = isset($_POST['add_time']) ? I('post.add_time') : '';

		$golb = isset($_POST['golb']) ? I('post.golb') : '';

		$sex = isset($_POST['sex']) ? I('post.sex') : '';

		$phone = isset($_POST['phone']) ? I('post.phone') : '';

		

		#储值余额  

		$single_balance = isset($_POST['single_balance']) ? I('post.single_balance') : '';

		#手动输入搜索范围

		$start_balance = isset($_POST['start_balance']) ? I('post.start_balance') : '';

		$end_balance = isset($_POST['end_balance']) ? I('post.end_balance') : '';

		$pay_time = isset($_POST['pay_time']) ? I('post.pay_time') : '';


		#消费总额   sum(pay_order.total_prices)

		$single_total_prices = isset($_POST['single_total_prices'])?I('post.single_total_prices'):'';

		#手动输入搜索范围

		$start_total_prices = isset($_POST['start_total_prices']) ? I('post.start_total_prices') : '';

		$end_total_prices = isset($_POST['end_total_prices']) ? I('post.end_total_prices') : '';

		

		#平均消费水平  avg(pay_order.total_prices)

		$single_avg_consume = isset($_POST['single_avg_consume']) ? I('post.single_avg_consume') : '';

		#手动输入搜索范围

		$start_avg_consume = isset($_POST['start_avg_consume']) ? I('post.start_avg_consume') : '';

		$end_avg_consume = isset($_POST['end_avg_consume']) ? I('post.end_avg_consume') : '';

		

		$avg_shopping_count = isset($_POST['avg_shopping_count']) ? I('post.avg_shopping_count') : '';

	}else{   #if($_GET){}

		$add_time = isset($_GET['add_time']) ? I('get.add_time') : '';

		$golb = isset($_GET['golb']) ? I('get.golb') : '';

		$sex = isset($_GET['sex']) ? I('get.sex') : '';

		$phone = isset($_GET['phone']) ? I('get.phone') : '';

		

		#储值余额  

		$single_balance = isset($_GET['single_balance']) ? I('get.single_balance') : '';

		#手动输入搜索范围

		$start_balance = isset($_GET['start_balance']) ? I('get.start_balance') : '';

		$end_balance = isset($_GET['end_balance']) ? I('get.end_balance') : '';

		$pay_time = isset($_GET['pay_time']) ? I('get.pay_time') : '';

		

		#消费总额   

		$single_total_prices = isset($_GET['single_total_prices'])?I('get.single_total_prices'):'';

		#手动输入搜索范围

		$start_total_prices = isset($_GET['start_total_prices']) ? I('get.start_total_prices') : '';

		$end_total_prices = isset($_GET['end_total_prices']) ? I('get.end_total_prices') : '';

		

		#平均消费水平  

		$single_avg_consume = isset($_GET['single_avg_consume']) ? I('get.single_avg_consume') : '';

		#手动输入搜索范围

		$start_avg_consume = isset($_GET['start_avg_consume']) ? I('get.start_avg_consume') : '';

		$end_avg_consume = isset($_GET['end_avg_consume']) ? I('get.end_avg_consume') : '';


		$avg_shopping_count = isset($_GET['avg_shopping_count']) ? I('get.avg_shopping_count') : '';

	}



	#注册时间 

	//$add_time = isset($_POST['add_time']) ? I('post.add_time') : I('get.add_time');

	if(!empty($add_time)){  

		$assign['add_time'] = $add_time;


		$add_time = explode('-', $add_time);

		if(count($add_time)>=2){   #add_time 中包含有字符-

			$where['_string'] .= ' and (u.addtime between '.strtotime('-'.$add_time[1]).' and '.strtotime('-'.$add_time[0]).')';

			

			

		}else if(count($add_time)==1){   #add_time 中没有包含有字符- ,但可能有>3


			$str = html_entity_decode($add_time[0]);


			$where['_string'] .= ' and u.addtime'.substr($str,0,1).strtotime('-'.substr($str,1));

			$assign['add_time'] = $add_time = html_entity_decode($add_time[0]); 

		}

	}



	#金币数量  user.golb

	//$golb = isset($_POST['golb']) ? I('post.golb') : I('get.golb');

	if(!empty($golb)){ 

		$assign['golb'] = $golb;


   		$golb = explode('-', $golb);

		if(count($golb)>=2){   #consume_time 中包含有字符-

			$where['_string'] .= ' and (u.golb between '.$golb[0].' and '.$golb[1].')';

			

		}else if(count($golb)==1){   #consume_time 中没有包含有字符-

			$where['_string'] .= ' and u.golb'.html_entity_decode($golb[0]);  


			$assign['golb'] = $golb = html_entity_decode($golb[0]); 

		}

	}




	#会员性别  user.sex

	//$sex = isset($_POST['sex']) ? I('post.sex') : I('get.sex');

	if(!empty($sex)){   

		$assign['sex'] = $sex;


		$where['_string'] .= " and u.sex='".$sex."'";

		

	}


	#电话号码  user.phone

    //$phone = isset($_POST['phone']) ? I('post.phone') : I('get.phone');

	if($phone!=''){ 

		$assign['phone'] = $phone;  


		if($phone == 1){

			$where['_string'] .= " and (u.phone != '0')";  #不为空	

		}else{

			$where['_string'] .= " and u.phone = '0' ";            #为空

		} 

	}




	#储值余额   count(vip_record.balance)

	//$single_balance = isset($_POST['single_balance']) ? I('post.single_balance') : I('get.single_balance');

	#手动输入搜索范围

	//$start_balance = isset($_POST['start_balance']) ? I('post.start_balance') : I('get.start_balance');

	//$end_balance = isset($_POST['end_balance']) ? I('post.end_balance') : I('get.end_balance');

	if($single_balance!=''){ 

		$assign['single_balance'] = html_entity_decode($single_balance); #有>0等情况

	}

	if($start_balance!=''){

		$assign['start_balance'] = $start_balance;  

	}

	if($end_balance!=''){

		$assign['end_balance'] = $end_balance;  

	}

	if($start_balance!='' || $end_balance!=''){

		if($start_balance=='') $start_balance=0;

        if($end_balance=='') $end_balance=0;

        $where['_string'] .= ' and up.balance between '.($start_balance<=$end_balance?$start_balance:$end_balance).' and '.($end_balance>=$start_balance?$end_balance:$start_balance);

	}else{

		if($single_balance!=''){  #single_balance 中包含有字符-

			$balance = explode('-', $single_balance);

			if(count($balance)>=2){

				$where['_string'] .= ' and up.balance between '.($balance[0]<=$balance[1]?$balance[0]:$balance[1]).' and '.($balance[1]>=$balance[0]?$balance[1]:$balance[0]);

			}else{

				$where['_string'] .= ' and up.balance'.html_entity_decode($balance[0]);

			}

		}

	}




	//分析的是当前商户下的已支付订单

	//$having .= " and po.sid =".parent::$adminid." and po.pay_status = 1";

	#到店分析  --- 在这个时间段内有消费的pay_order表 并且m!=0

	//$pay_time = isset($_POST['pay_time']) ? I('post.pay_time') : I('get.pay_time');

    if(!empty($pay_time)){

    	$assign['pay_time'] = $pay_time;


    	$having .= " and po.mid != 0";

    	

    	$pay_time = explode('-', $pay_time);

		if(count($pay_time)>=2){   #consume_time 中包含有字符-

			$having .= ' and (po.pay_time between '.strtotime('-'.$pay_time[1]).' and '.strtotime('-'.$pay_time[0]).')';

			

		}else if(count($pay_time)==1){   #consume_time 中没有包含有字符-


			$str = html_entity_decode($pay_time[0]);

			

			$having .= ' and po.pay_time'.substr($str,0,1).strtotime('-'.substr($str,1));

			

			$assign['pay_time'] = $pay_time = html_entity_decode($pay_time[0]); 

		}

	}



	#消费总额   sum(pay_order.total_prices)

	//$single_total_prices = isset($_POST['single_total_prices']) ? I('post.single_total_prices') : I('get.single_total_prices');

	#手动输入搜索范围

	//$start_total_prices = isset($_POST['start_total_prices']) ? I('post.start_total_prices') : I('get.start_total_prices');

	//$end_total_prices = isset($_POST['end_total_prices']) ? I('post.end_total_prices') : I('get.end_total_prices');

	if($single_total_prices!=''){ 

		$assign['single_total_prices'] = html_entity_decode($single_total_prices); #有>0等情况 

	}

	if($start_total_prices!=''){

		$assign['start_total_prices'] = $start_total_prices;  

	}

	if($end_total_prices!=''){

		$assign['end_total_prices'] = $end_total_prices;  

	}

	if($start_total_prices!='' || $end_total_prices!=''){

		if($start_total_prices=='') $start_total_prices=0;

        if($end_total_prices=='') $end_total_prices=0;

        $having .= ' and sum(po.total_prices) between '.($start_total_prices<=$end_total_prices?$start_total_prices:$end_total_prices).' and '.($end_total_prices>=$start_total_prices?$end_total_prices:$start_total_prices);

	}else{

		if($single_total_prices!=''){  #single_balance 中包含有字符-

			$total_prices = explode('-', $single_total_prices);

			if(count($total_prices)>=2){

				$having .= ' and sum(po.total_prices) between '.($total_prices[0]<=$total_prices[1]?$total_prices[0]:$total_prices[1]).' and '.($total_prices[1]>=$total_prices[0]?$total_prices[1]:$total_prices[0]);

			}else{

				 $having .= ' and sum(po.total_prices)'.html_entity_decode($total_prices[0]);

			}

		}

	}


	

	#平均消费水平  avg(pay_order.total_prices)

	//$single_avg_consume = isset($_POST['single_avg_consume']) ? I('post.single_avg_consume') : I('get.single_avg_consume');

	#手动输入搜索范围

	//$start_avg_consume = isset($_POST['start_avg_consume']) ? I('post.start_avg_consume') : I('get.start_avg_consume');

	//$end_avg_consume = isset($_POST['end_avg_consume']) ? I('post.end_avg_consume') : I('get.end_avg_consume');

	if($single_avg_consume!=''){ 

		$assign['single_avg_consume'] = html_entity_decode($single_avg_consume); #有>0等情况 

	}

	if($start_avg_consume!=''){

		$assign['start_avg_consume'] = $start_avg_consume;  

	}

	if($end_avg_consume!=''){

		$assign['end_avg_consume'] = $end_avg_consume;  

	}

	if($start_avg_consume!='' || $end_avg_consume!=''){

		if($start_avg_consume=='') $start_avg_consume=0;

        if($end_avg_consume=='') $end_avg_consume=0;

        $having .= ' and avg(po.total_prices) between '.($start_avg_consume<=$end_avg_consume?$start_avg_consume:$end_avg_consume).' and '.($end_avg_consume>=$start_avg_consume?$end_avg_consume:$start_avg_consume);

	}else{

		if($single_avg_consume!=''){  #single_balance 中包含有字符-

			$avg_consume = explode('-', $single_avg_consume);

			if(count($avg_consume)>=2){

				$having .= ' and avg(po.total_prices) between '.($avg_consume[0]<=$avg_consume[1]?$avg_consume[0]:$avg_consume[1]).' and '.($avg_consume[1]>=$avg_consume[0]?$avg_consume[1]:$avg_consume[0]);

			}else{

				 $having .= ' and avg(po.total_prices)'.html_entity_decode($avg_consume[0]);

			}

		}

	}



	#月均购买频次  count(pay_order.total_prices)  pay_order.pay_type=2(商城下单) 已支付成功   pay_order.pay_type=0(门店结账) 已支付成功

	//$avg_shopping_count = isset($_POST['avg_shopping_count']) ? I('post.avg_shopping_count') : I('get.avg_shopping_count');

	if(!empty($avg_shopping_count)){  

		$assign['avg_shopping_count'] = html_entity_decode($avg_shopping_count);


		$having .= ' and count(*)/TIMESTAMPDIFF(MONTH,FROM_UNIXTIME(u.addtime),now())'.html_entity_decode($avg_shopping_count);

	}

	



    #如果查询条件中有 到店分析、消费总额、平均消费水平、月均购买频次

    unset($total_prices,$avg_consume);

    $total_prices = $assign['single_total_prices'].$assign['start_total_prices'].$assign['end_total_prices'];

    $avg_consume = $assign['single_avg_consume'].$assign['start_avg_consume'].$assign['end_avg_consume'];

	if(!empty($assign['pay_time']) || !empty($total_prices) || !empty($avg_consume) || !empty($assign['avg_shopping_count'])){

		$having .= " and po.sid =".parent::$adminid." and po.pay_status = 1";

    }


    



    #默认排序是按id升序排列

    $sort_by=$_POST['sort_by'] ? I('post.sort_by') : I('get.sort_by');

    $sort_order=$_POST['sort_order'] ? I('post.sort_order') : I('get.sort_order');

    if(empty($sort_by)) $sort_by = 'id';          //默认情况

    if(empty($sort_order)) $sort_order = 'ASC';   //默认情况

    $assign['sort_by'] = $sort_by;

    $assign['sort_order'] = $sort_order;


    




    $this->assign('assign',$assign);   #直接转为json格式

	$this->assign('data',json_encode($assign));


	/*$str = '';

    foreach ($assign as $key => $value) {

    	$str .= $key.':'.$value.';';

    }

	$this->ajaxReturn(['status'=>1,'msg'=>$str ]);*/




	$assign['where'] = $where;

	$assign['having'] = $having;         



	return $assign;

}



/*会员分析查询*/
public function index(){


    $search = $this->search_user();  


    #条件

    $where  = $search['where'];  

    $having  = $search['having'];  

    unset($search['where'],$search['having']);


    //dump('这个是search:'); dump($search);


	#测试使用

   	/*$str = '';

    foreach ($search as $key => $value) {

    	 $str.= $key.':'.$value.';';

    }

    $this->ajaxReturn(['status'=>1,'msg'=>$str]);*/

    


    $pageSize = 10;    

    $limit = getLimit($pageSize);   



    $Userp = M('user_property');

    $state = I('post.state');

    if($state) $limit = '';


   

    #默认排序是按id升序排列

    $order=$search['sort_by'].' '.$search['sort_order'];  

    //$this->ajaxReturn(['status'=>1,'msg'=>$order]);  #测试使用


/*select 

p.id,p.realname,p.sex,p.phone,p.golb,p.addtime,p.balance,sum(po.total_prices) total_prices,

AVG(po.total_prices) as avg_consume,count(*)/TIMESTAMPDIFF(MONTH,FROM_UNIXTIME(p.addtime),now()) as avg_shopping_count  

from (

select U.ID,u.realname,u.sex,u.phone,u.golb,u.addtime, sum(up.balance) as balance from zcm_user as u left join zcm_user_property as up on u.id=up.id

 WHERE  1=1  and up.sid = 62 group by up.id

)as p

left join zcm_pay_order as po on po.uid=p.id

 WHERE  1=1 and po.sid=62 and  po.pay_status = 1  group by po.uid order by p.balance asc*/

	

		#select U.ID,u.realname,u.sex,u.phone,u.golb,u.addtime, sum(up.balance) as balance from zcm_user as u left join zcm_user_property as up on u.id=up.id WHERE  1=1  and up.sid = 62 group by up.id

	$full_user_property = C('DB_PREFIX').'user_property';

	$subQuery = M('user')->alias('u')->field('U.ID,u.headimgurl,u.nickname,u.realname,u.sex,u.phone,u.golb,u.addtime,sum(up.balance) as balance')->join('LEFT JOIN '.$full_user_property.' as up ON up.id = U.ID')->group('U.ID')->where($where)->buildSql();

	

	$full_pay_order = C('DB_PREFIX').'pay_order';

	// 利用子查询进行查询 

	$info = M()->table($subQuery.' u')->field("U.ID,u.headimgurl,u.nickname,u.realname,u.sex,u.phone,u.golb,FROM_UNIXTIME(u.addtime, '%Y-%m-%d %H:%i:%S') add_time,u.balance,sum(po.total_prices) as total_prices,AVG(po.total_prices) as avg_consume,count(*)/TIMESTAMPDIFF(MONTH,FROM_UNIXTIME(u.addtime),now()) as avg_shopping_count,po.mid,FROM_UNIXTIME(po.pay_time, '%Y-%m-%d %H:%i:%S') paytime,po.sid,po.pay_status,po.pay_time,u.addtime")->join('LEFT JOIN '.$full_pay_order.' as po ON po.uid = U.ID')->where(['po.sid'=>parent::$adminid])->group('U.ID')->having($having)->order($order)->limit($limit)->select();  

	    //['po.sid'=>parent::$adminid,'po.pay_status'=>1]

	


	// 分页查询时计算总数据量,子表

	$squery = M()->table($subQuery.' u')->field('U.ID,u.headimgurl,u.nickname,u.realname,u.sex,u.phone,u.golb,u.addtime,u.balance,sum(po.total_prices) as total_prices,AVG(po.total_prices) as avg_consume,count(*)/TIMESTAMPDIFF(MONTH,FROM_UNIXTIME(u.addtime),now()) as avg_shopping_count,po.mid,po.pay_time,po.sid,po.pay_status')->join('LEFT JOIN '.$full_pay_order.' as po ON po.uid = U.ID')->where(['po.sid'=>parent::$adminid])->group('U.ID')->having($having)->order($order)->buildSql();


	


	#选择排序时,发起ajax请求

	if(isset($_POST['sort_by'])&&isset($_POST['sort_order'])){

		$count = M()->table($squery.' u')->count();

        $Page  = new \Think\Page($count,$pageSize); 

        

        foreach ($search as $key => $value) {

            $Page->parameter[$key] = ($value);

        }

        $show  = $Page->show(); 


		#有搜索条件才展示数据   可导出数据

 		if(!( trim($where['_string']) == '1=1' && trim($having) == '1=1' ))

			$this->ajaxReturn(['status'=>1,'msg'=>$info,'count'=>$count,'page'=>$show]);

		else

			$this->ajaxReturn(['status'=>0,'msg'=>'请您先设置查询条件!']);

	} 

 	

 	/*$sort = ['sort_by'=>$sort_by,'sort_order'=>$sort_order];

		$this->assign('sort',$sort);*/


 	#有搜索条件才展示数据   可导出数据

 	if(trim($where['_string']) == '1=1' && trim($having) == '1=1'){	

		exit($this->display());

	}



	//导出数据

		if($state) exit($this->ExportUserinfo($info));


	$this->assign('user',$info);


	#分页

	$count = M()->table($squery.' u')->count();

	/*

	#Page的构造方法

	public function __construct($totalRows, $listRows=20, $parameter = array()) {

		$this->parameter  = empty($parameter) ? $_GET : $parameter;

	}*/

    $Page  = new \Think\Page($count,$pageSize,$search); 

    

    /*

    #这样添加的话会保留原来的get信息

    foreach ($search as $key => $value) {

        $Page->parameter[$key] = ($value);

    }*/

    $show = $Page->show(); 

    $this->assign('page',$show);

    $this->assign('count',$count);

    

	//$this->pageLimit(['_string'=>'1=1'],M()->table($squery.' u'),$pageSize,$search);   #分页	

    $this->display();

}

	


#tp框架中自带的分页处理代码段
public function pageLimit0($where='',$Model,$num=25,$search=[]){

    $count = $Model->where($where)->count();

    $this->assign('count',$count);

    $Page  = new \Think\Page($count,$num); 

    unset($search['_string']);

    foreach ($search as $key => $value) {

        $Page->parameter[$key] = ($value);

    }

    $show  = $Page->show(); 

    $this->assign('page',$show); 

}




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值