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;
            }
    }
    
  • 相关阅读:
    antd按需加载
    解决vscode开发react项目没有代码提示问题
    在react中配置less
    flutter之fluro导航传参数
    Flutter游戏:简单规则与结束页
    zsh: command not found:XXX
    React的安装与使用
    git stash 用法总结和注意点
    【OSS】工具类
    ajax将数组或list集合传到后台 的 【坑】
  • 原文地址:https://www.cnblogs.com/zhepama/p/3558719.html
Copyright © 2011-2022 走看看