• PHP自动分表程序


    http://blog.zol.com.cn/2210/article_2209590.html

    /**
     * 分表程序
     *
     * @author Shen Xi shen.xi@zol.com.cn
     * @date 2010-08-19
     */
    set_time_limit(0);
    $con = mysql_connect("127.0.0.1","root","111111");#创建数据库连接
    mysql_select_db ("test",$con);#选择连接数据库“test”
    mysql_query("set names gbk");#设置获取数据得字符集

    $slctTable = "tb_test";

    #获取被分表结构
    $sql = "show create table $slctTable";
    $result = mysql_query($sql);
    $row = mysql_fetch_array($result);
    $createTable = $row['Create Table'];

    //echo "$createStr
    ";

    #获取被分表字段名
    $field = mysql_list_fields("test",$slctTable,$con);
    $filedNum = mysql_num_fields($field);
    $fieldStr = "";
    for($i=0;$i < $filedNum;$i++){
        $fieldStr.= "`". mysql_field_name($field, $i)."`,";
    }
    if(strlen($fieldStr) == 0){
        echo "获取表字段有误!";
        exit;
    }
    $fieldStr = "(".substr($fieldStr,0,-1).")";


    //echo "$fieldStr
    ";
    //exit;

     #查找最大用户id
     $sql = "SELECT max(id) as maxid
             FROM  $slctTable";
     $result =mysql_query($sql);
     $row = mysql_fetch_row($result);
     
     $maxid = (int)$row[0];
    // var_dump($maxid);
     //exit;
     if($maxid > 1){
         $count = ceil($maxid / 1000);
     }else{
         echo "用户最大id有误";
         exit;
     }
     $per = 500;#每次取得的记录条数
     $prefix = "tb_test";
     for($i=0;$i<=$count;$i++){
         
         $table = $prefix.$i;
        #生成创建新表的sql语句
        $createStr = str_replace("CREATE TABLE `$slctTable`","CREATE TABLE IF NOT EXISTS `$table`",$createTable);
        $filehandle = fopen ($table.".sql", "a+");
        fwrite($filehandle, $createStr." ");
    //    mysql_query($createStr);
         $sql="SELECT COUNT(*) AS num
                 FROM $slctTable where CEILING(id / 1000)=$i";
        $result =mysql_query($sql);
        $row = mysql_fetch_row($result);
        
        $num = (int)$row[0];
         $maxNum= ceil((int)$num / $per);
         
         for($j=0;$j<$maxNum;$j++){
             $lmt = $j * $per;
             if($lmt <= (int)$num){
                 $sql = "select * from $slctTable where CEILING(id / 1000)=$i order by id limit $lmt,500";
    //             fwrite($filehandle, $sql."");
                $inStr="REPLACE INTO ".$table." ".$fieldStr." VALUES";
    //            fwrite($filehandle, $inStr." ");
                $result = mysql_query($sql);             
                 if($result){
                     $value="";
                     while ($row = mysql_fetch_row($result)){
                         $value.= "(";
                         for($n=0;$n < $filedNum;$n++){
                             $value.="'".addslashes($row[$n])."',";
                         }
                         if(strlen($value)>2){
                             $value = substr($value,0,-1)."), ";
                         }
                     }
                     if(strlen($value)>2){
                         $value = substr($value,0,-3)."";
                     }
                     $inStr = $inStr.$value;
    //                 echo $inStr." ";
    //                 mysql_query($inStr);
                     fwrite($filehandle, $inStr);                 
                 }
    //             fclose($filehandle);
    //             exit;
             }else{
                 break;
             }
         }
         fclose($filehandle);

     }

    ?>

  • 相关阅读:
    org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException)
    linux命令之find和locate
    Java多线程3:Thread中的静态方法
    session的使用
    cookie的简单使用
    Spring 注入集合类型
    对Spring 容器管理事务支持的总结
    对SpringDAO层支持的总结
    为spring代理类设置属性值
    在spring中获取代理对象代理的目标对象工具类
  • 原文地址:https://www.cnblogs.com/Alight/p/3645098.html
Copyright © 2020-2023  润新知