按天分表后查询分页(查询表计算方法)

本文介绍了一种按天分表后的分页查询方法,提供了分页计算的函数,讨论了不同查询策略的优缺点,尤其是针对大数据量时的效率问题。文中提到了徐版主的思路,并探讨了使用UNION和关联表查询的潜在问题,鼓励大家交流更优的实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**
* 分页计算方法
* @param totalNumtotalNum 要求格式Array ( [0] => Array ( [0] => 20170922 [1] => 28 ) [1] => Array ( [0] => 20170921 [1] => 1 ) [2] => Array ( [0] => 20170920 [1] => 11 ) )
* @param $page 当前第几页
* @return array
*/

 private function tableCount( $totalNum,$page){    
 $prevNum = ($page-1) * 15; //之前页面条数    
 $nowNum = $i = 0;    
 $resArr = array();   
 $arrNum = count($totalNum);
 foreach($totalNum as $key => $value){        
        $nowNum += $value[1]; //当前总条数        
        //大于上页数据则为当前页需要显示数据        
        if($nowNum > $prevNum){            
            if($resArr){                
                $alyNum = 0;                
                foreach($resArr as $k => $v){                    
                    $nArr = explode(",",$v['nums']);                    
                    $alyNum += $nArr[1];                
                }                
                $offset = $value[1]-($nowNum - $prevNum)+$alyNum;                
                $pagesize = ((15-$alyNum) < $value[1]) ? (15-$alyNum) : $value[1];    
            }else{                
                $offset = $value[1]-($nowNum - $prevNum);                
                $pagesize = ($nowNum - $prevNum > 15) ? 15 : ($nowNum - $prevNum); 
            }   
            $resArr[$key]['dates'] = $value[0];            
            $resArr[$key]['nums'] = $offset.",".$pagesize;        
            }        
            $i++; //满足最后一页查询不足15条        
            //足够当前页显示则返回        
            if($pagesize == 15 || $i == $arrNum){            
                return $resArr;       
             }    
    }
}

返回格式(跨表后会有多个值):

Array
(
    [0] => Array
        (
            [dates] => 20170922  //表名
            [nums] => 0,15  //$offset,$pagesize
        )
)

网上也是看了徐版主的思路写的,下边附上徐版主的思路截图,网上还有很多说利用union和关联表查询的方法,感觉这些方法会很慢,而且当查询的表多了sql也不美观 , 直接放弃了
这里写图片描述
欢迎各位大牛指正或交流更好的实现方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值