Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 高效地将大表复制到其他表_Php_Mysql_Codeigniter - Fatal编程技术网

Php 高效地将大表复制到其他表

Php 高效地将大表复制到其他表,php,mysql,codeigniter,Php,Mysql,Codeigniter,有一个很大的表,我需要将它的内容移动到一个具有不同结构的表中。这些表位于不同的数据库上。为此,我使用了一个PHP脚本。但是脚本没有按照我想要的方式工作。它不断复制,永不停止。也许这是一个愚蠢而简单的问题,但现在我的头在旋转,因为我尝试了,但我不能把我的手指放在这个问题上。这项工作需要立即完成。如果你能帮忙,我会很高兴的。下面是代码片段: function copy_table() { $this->load->database(); $num_rows = $thi

有一个很大的表,我需要将它的内容移动到一个具有不同结构的表中。这些表位于不同的数据库上。为此,我使用了一个PHP脚本。但是脚本没有按照我想要的方式工作。它不断复制,永不停止。也许这是一个愚蠢而简单的问题,但现在我的头在旋转,因为我尝试了,但我不能把我的手指放在这个问题上。这项工作需要立即完成。如果你能帮忙,我会很高兴的。下面是代码片段:

function copy_table()
{
    $this->load->database();

    $num_rows = $this->db->get('orj_table')->num_rows();

    $offset = 0;
    $limit = 500;

    while ($offset <= $num_rows)
    {       
        $this->load->database();

        //Query for original table
        //......

        $this->db->limit($limit, $offset);
        $records = $this->db->get('orj_table')->result_array();
        $this->db->close();

        //Open a connection to new database. 

        $this->db_new = $this->load->database('new', TRUE);

        foreach($records as $record)
        {   
            $data1 = $record['data1'];
            $data2 = $record['data2'];

            $datas[] = array('data1 => $record['data1'],
                    'data2 => $record['data2']
                    );
        }

        //Insert 500 records at one time with "insert_batch"
        $sorgu = $this->db_yeni->insert_batch('new_table', datas);

        $this->db->close();
        $offset += 500;
    }
}

请尝试改用此简单的mysql查询:


插入到不同的_表中从初始_表中选择col1、col3、col4

为什么要使用PHP,或者最重要的是CodeIgniter

你应该按照以下思路做一些事情:

CREATE TABLE `newtable`
    SELECT * FROM `othertable`;
。。当然,您可以选择所需内容、联接、定义新列名等,并且您选择的内容将被放入新表中


如果目标表已经存在,请将“创建”更改为“插入”。

如果希望提高效率,请从不使用PHP开始。尝试使用mysqldump。我不知道为什么它会重复复制并且从不停止,但在调用insert_批处理函数的行中,您似乎遗漏了$before DATA。关于您的过度复制,这是因为您从未取消设置将反复填充的$DATA[]数组。因此,每次在while循环中,它都会重新插入整个数组。@Tom:Thans-Tom!是的,这绝对是问题所在!没问题;我去过那里,做过那件事。我以前对那个问题很困惑!但是您应该明确地了解纯Mysql解决方案!有50万条记录。内存会由MySQL自动管理吗?肯定比使用PHP脚本在没有睡眠的情况下进行1000次批处理查询更有效;为什么您更喜欢子查询而不是MySQL?@obserobot什么子查询?从初始表中选择col1、col3、col4\u table是子查询