zoukankan      html  css  js  c++  java
  • thinkphp中的分表方法

    public function getPartitionTableName($data=array()) {
            // 对数据表进行分区
            if(isset($data[$this->partition['field']])) {
                $field   =   $data[$this->partition['field']];
                switch($this->partition['type']) {
                    case 'id':
                        // 按照id范围分表
                        $step    =   $this->partition['expr'];
                        $seq    =   floor($field / $step)+1;
                        break;
                    case 'year':
                        // 按照年份分表
                        if(!is_numeric($field)) {
                            $field   =   strtotime($field);
                        }
                        $seq    =   date('Y',$field)-$this->partition['expr']+1;
                        break;
                    case 'mod':
                        // 按照id的模数分表
                        $seq    =   ($field % $this->partition['num'])+1;
                        break;
                    case 'md5':
                        // 按照md5的序列分表
                        $seq    =   (ord(substr(md5($field),0,1)) % $this->partition['num'])+1;
                        break;
                    default :
                        if(function_exists($this->partition['type'])) {
                            // 支持指定函数哈希
                            $fun    =   $this->partition['type'];
                            $seq    =   (ord(substr($fun($field),0,1)) % $this->partition['num'])+1;
                        }else{
                            // 按照字段的首字母的值分表
                            $seq    =   (ord($field{0}) % $this->partition['num'])+1;
                        }
                }
                return $this->getTableName().'_'.$seq;
            }else{
                // 当设置的分表字段不在查询条件或者数据中
                // 进行联合查询,必须设定 partition['num']
                $tableName  =   array();
                for($i=0;$i<$this->partition['num'];$i++)
                    $tableName[] = 'SELECT * FROM '.$this->getTableName().'_'.($i+1);
                $tableName = '( '.implode(" UNION ",$tableName).') AS '.$this->name;
                return $tableName;
            }
    }
    
  • 相关阅读:
    python函数--isalpha()方法
    python函数--isdigit()方法
    python函数--isalnum()方法
    python函数--range()方法
    python函数--len()方法
    python函数--介绍
    Linux命令总结--awk命令
    Linux命令总结--pwd命令
    Linux命令总结--rm命令
    Linux命令总结--cp命令
  • 原文地址:https://www.cnblogs.com/zhepama/p/3558719.html
Copyright © 2011-2022 走看看