分表后的查询

public function getDouRecordList($sql,$p){
		$totals = 0;
		$listRows = 20;
		$record1Arr = $record2Arr= array();
		
		$recordNum1 = M('users_jd_log')->where($sql)->count();
		$recordNum2 = M('users_jd_log_1y')->where($sql)->count();
		$recordNum3 = M('users_jd_log_3m')->where($sql)->count();
		$totals = $recordNum1+$recordNum2+$recordNum3;
		if($totals){
			import("@.ORG.Page");
			$page = new Page($totals,$listRows);  //总的page数
		
			$curpage = $p ? $p: 1; //当前页面
			$curoffset= ($curpage-1)*$listRows; //页面偏移量
		
			$lastTotals = $curoffset; //偏移量之前的总条数
			//定位页面偏移量
			if($lastTotals <= $recordNum1){
				$offsetFlag = 1;
				$offset = $curoffset;
			}else if($lastTotals <=($recordNum1+$recordNum2)){
				$offsetFlag = 2;
				$offset = $curoffset-$recordNum1;
			}else if($lastTotals <=($recordNum1+$recordNum2+$recordNum3)){
				$offsetFlag = 3;
				$offset = $curoffset -$recordNum1-$recordNum2;
			}else{
				$offsetFlag = 3;
				$offset = $curoffset -$recordNum1-$recordNum2;
			}
			
			$recordTableArr = array('1'=>'users_jd_log','2'=>'users_jd_log_3m','3'=>'users_jd_log_1y');
			$curTable = $recordTableArr[$offsetFlag];
			
			$record1Arr = M($curTable)->where($sql)->limit("{$offset},{$listRows}")->select();
		 
			if(count($record1Arr)<$listRows){
				foreach($recordTableArr as $key=>$val){
					if($offsetFlag < $key) $nexTableArr[$key] = $val; 
				} 

				$listRows = $listRows-count($record1Arr);
				if($nexTableArr){
					foreach($nexTableArr as $k=>$v){
						$nextRecordTable = $v;
						$nextOffset = 0; //默认下张表的偏移量是0;
						$nextNumTotals = "recordNum".$key;
						$tmpArr = array();
						while($nextOffset < $$nextNumTotals){ //不断查询表信息得到数据
							$rArr = M($nextRecordTable)->where($sql)->limit("{$nextOffset},{$listRows}")->select();
							$nextOffset +=$listRows;
							if($rArr){
								foreach($rArr as $k=>$v) $tmpArr[] = $v;
							}
							if(count($tmpArr)==$listRows) break;
						}
						
						if($tmpArr){
							foreach($tmpArr as $k=>$v) $record1Arr[] = $v;
							$listRows -= count($tmpArr);
						}
						if($listRows==0) break;
					}
				}
			}
			return array('page'=>$page,'record'=>$record1Arr);
		}
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值