Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.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 - Fatal编程技术网

Php 复制具有特定日期的数据库

Php 复制具有特定日期的数据库,php,mysql,Php,Mysql,将数据库按特定日期从一个复制到另一个的最佳方法是什么? 下面是流程,用户对我的程序PHP语言执行一些操作,然后获取一些文件。然后,他需要将该文件上传到另一个程序,以便复制数据库 要复制的只是没有结构的数据,因为结构总是相同的 这里的示例是数据的结构 名为old的源表 然后用户只想下载2012-06-03的数据,将其移动到名为new的新表中。而新计划的结果将是: id | date | value_1 | value_2 | value 3 2 | 2012-06-03 |

将数据库按特定日期从一个复制到另一个的最佳方法是什么? 下面是流程,用户对我的程序PHP语言执行一些操作,然后获取一些文件。然后,他需要将该文件上传到另一个程序,以便复制数据库

要复制的只是没有结构的数据,因为结构总是相同的

这里的示例是数据的结构

名为old的源表

然后用户只想下载2012-06-03的数据,将其移动到名为new的新表中。而新计划的结果将是:

id | date       | value_1   | value_2   | value 3
2  | 2012-06-03 | some_data | some_data | some_data
3  | 2012-06-03 | some_data | some_data | some_data
注:

[*]The program will be need smart enough to understand, if the `id` already in the `new` database then do `update` if not do `insert`.
[*]The table is located on different database. e.g: `db_source.old` copied to `db_target.new`
这样做的最佳逻辑是什么?或者可能已经有一些类来处理这种任务了

请理解这不是大学的任务,而是我想加入到我的课程中的真正的项目实施。我在这里问的不是获取代码的问题。请给我一些线索,然后我会很乐意研究它

已经制作了一些输出数据的脚本

执行收集数据脚本的某些代码段

/**
 * Get all database data and output it in array format
 * @return array
 */
function output(){
    $return = array();
    foreach($this->getAllTableName() as $table_name){
        $this->load->model($table_name.'_model');
        $class_name = $table_name.'_model';
        $model = new $class_name;

        $return[$table_name] = array();
        $this->db->where('created >=', $this->date_start);
        $this->db->where('created <=', $this->date_end);            
        foreach((array)$model->get() as $object){               
            $return[$table_name][$object->id] = $this->wrap_value($object);
        }           
    }

    return $return;
}
输出:


但是仍然与SQL文件相混淆的是,为了理解哪些数据需要更新和插入,我们将编写一个存储过程来接受id号(可能在数组中或其他什么东西中),并移动数据。表名是否硬编码?数据库是硬编码的吗?您始终可以为每个表编写一个存储过程,并按照逻辑选择php中的哪个过程。如果数据库不是硬编码的,则始终可以将in作为参数

不确定确切的编码,但是像这样的东西怎么样:

将@ids作为id1、id2、id3传递。。。或数组。将它们与子句一起使用。也使用

你只需要用你的更新来替换c=3。下面是使用join from进行更新的示例


执行一个存储过程,该过程可以接受数组或其他形式的id号,并移动数据。表名是否硬编码?数据库是硬编码的吗?您始终可以为每个表编写一个存储过程,并按照逻辑选择php中的哪个过程。如果数据库不是硬编码的,则始终可以将in作为参数

不确定确切的编码,但是像这样的东西怎么样:

将@ids作为id1、id2、id3传递。。。或数组。将它们与子句一起使用。也使用

你只需要用你的更新来替换c=3。下面是使用join from进行更新的示例


您还可以使用select响应创建表:

create table newtbl select * from oldtbl where date='2012-06-03';

新表将从原始表继承字段定义。

您也可以使用select响应创建表:

create table newtbl select * from oldtbl where date='2012-06-03';

新表将继承原始表的字段定义。

表名和数据库名不是硬编码的,我添加了数据收集的详细信息。现在只需要了解如何输出SQL文件,也许以后在其他程序上重新加载SQL文件会更容易,然后您可以编写多个过程或添加更多参数。不确定它在mysql中是如何工作的,但在tsql中,您可以将查询保存为varcharmax字符串,然后运行execute@stringVariable执行它。但这确实使调试更加困难。请查看重复时的插入。我在使用tsql时没有实际尝试过,但它看起来很棒表名和数据库名不是硬编码的,我添加了数据收集的细节。现在只需要了解如何输出SQL文件,也许以后在其他程序上重新加载SQL文件会更容易,然后您可以编写多个过程或添加更多参数。不确定它在mysql中是如何工作的,但在tsql中,您可以将查询保存为varcharmax字符串,然后运行execute@stringVariable执行它。但这确实使调试更加困难。请查看重复时的插入。我在使用tsql时没有实际尝试过,但它看起来很棒我认为新数据库上的表在结构上已经存在,他提到检查数据行是否已经在表中,因为他想更新而不是插入数据行。对此我不确定。我们不需要创建新表。桌子已经在那儿了。我们唯一需要做的就是插入或更新数据!现在我明白了。很抱歉,我将回顾这个问题并考虑一下。我认为新数据库上的表已经存在结构方面的问题,他提到检查datarow是否已经在表中,因为他想更新而不是插入。我不确定这一点。我们不需要创建新表。桌子已经在那儿了。我们唯一需要做的就是插入或更新数据!现在我明白了。对不起,我会复习并思考这个问题。
UPDATE FROM tblTransaction AS t 
LEFT JOIN tblEmployee as e 
ON e.emp_id = t.emp_id 
SET t.emp_block = e.emp_block
create table newtbl select * from oldtbl where date='2012-06-03';