1. 程式人生 > >根據時間範圍獲取表名(table_prefix)

根據時間範圍獲取表名(table_prefix)

兩張 hrd amp 跳出循環 業務 rpo stat elf 16px

分表規則為:
每月分兩張表.

1-15號為 table_prefix_Ym_1 ,
16-31號為table_prefix_Ym_2 ,
如:table_prefix_201903_1
<?php
/**
 * @purpose: 根據時間範圍獲取表名
 * @explain: 表名的分表規則是,每月分兩張表,1-15號為 table_prefix_Ym_1 ,16-31號為table_prefix_2 , 如:table_prefix_201903_1
 * User: Chrdai
 * Date: 2019/3/5
 * Time: 18:08
 */

class TablePrefix
{
    
/** * @const app調用記錄表前綴 */ const PREFIX= ‘table_prefix_‘; /** * @purpose:獲取指定時間範圍內的app調用記錄表 * @param int|string $starttime 開始時間 * @param int|string $endtime 結束時間 * @return array $tables 指定時間範圍內的應用程序記錄表 */ public static function getTableByDateRange($starttime
,$endtime) { $tables = []; if(!empty($starttime)){ $start = is_numeric($starttime) ? date(‘Ymd‘,$starttime) : date(‘Ymd‘,strtotime($starttime)); } if(!empty($endtime)){ $end = is_numeric($endtime) ? date(‘Ymd‘,$endtime) : date(‘Ymd‘,strtotime
($endtime)); } if(!empty($start) && !empty($end)){ $prev = floor($start / 100); $next = floor($end / 100); //開始時間小於等於結束時間範圍內的表都房間$tables while ($prev <= $next){ $tables[] = self::PREFIX . $prev. ‘_1‘; $tables[] = self::PREFIX . $prev. ‘_2‘; $prev = ($prev % 100 === 12) ? ((floor($prev/100) + 1) * 100 +1) : $prev + 1; //對誇年的月份做特殊處理 } //以15天為分界線,分上下月,去除重復的表 if($start % 100 > 15){ array_shift($tables); } if($end % 100 <= 15){ array_pop($tables); } } return $tables; } }
//獲取表名
$tables = TablePrefix::getTableByDateRange(‘2019-03-05 12:00:00‘,‘2019-03-05 14:00:00‘);
//循環處理各個表中的數據
$table = array_shift($tables); // 首先拿出第一張表中的數據
while(true){
    __loop:
    
    //...... (每張表的業務邏輯)
    
    // 如果$tables中沒有表了,則跳出循環,否則循環處理
    if(empty($tables)){
        break;
    }else{
        $table = array_shift($tables);
        goto __loop;
    }
}

`

根據時間範圍獲取表名(table_prefix)