使用PHP从一个SQL数据库中获取数据并将其插入另一个SQL数据库

时间:2014-08-22 21:55:17

标签: php mysql sql-server

我需要帮助将数据从一个MySQL数据库插入另一个MySQL数据库。我根据过去90天从每天晚上更新的MySQL数据库中获取数据。我正试图将数据从一个表格转换为另一个表格。这是我到目前为止所拥有的。

<?php
$con= mysqli_connect("localhost","jeff","birdie15","kcoj");
    if ($con->connect_errno) {
        echo ("<br/> Failed to connect to MySQL:(".
        $con->connect_errno .").".$con->connect_error);
    }else{
        echo ("Connected to database".KCOJ);
        echo ("<br/> ".$con->host_info);
    }

    $d= date ($format, strtotime ('-90' .$date));

    $code = mysqli_query($con,"INSERT INTO last90Days * SELECT * FROM drugCountsByCharge WHERE countyCode ='9999' AND date <= '$d'");

?>

我有36列必须被查询然后插入并且有大量的行。任何和所有的帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

为了获得更好的性能,尝试使用分组的SQL语句,并避免获得太多结果并将所有可用内存加载到mysql中,通过交互获得几行。

您可以先计算源数据库中的行总数,然后将其拆分为&#34; blocks&#34;例如,在100.000个寄存器中,你可以创建一个这样的插入语句:     INSERT INTO your_table(field1,field2,field3,field4,....)VALUES     (值1,值2,值3,值4,....)     ,(值1,值2,值3,值4,....)     ,(值1,值2,值3,值4,....)     ,(值1,值2,值3,值4,....)     ,(值1,值2,值3,值4,....)     ,(值1,值2,值3,值4,....)     ...

所以......首先你必须知道你拥有的总行数:     SELECT COUNT(1)总计来自your_table;

之后,您可以为每次迭代估算多个行:     

for($i=0;$i<=$number_of_iteractions;$i++) {
    $limit_start = $i * $rows_per_process; # to know where to start getting data
    $limit_end = $rows_per_process;

    $sql = "SELECT colunsx... FROM your_table LIMIT $limit_start,$limit_end";
    $query = mysql_query($sql);

    $data = array();
    while($row = mysql_fetch_array($query)) {
        # build your VALUES statement here
    }
}

?>

构建分组的sql语句后,您可以提交事务。

根据您的需要调整它,因为我没有测试任何东西。

答案 1 :(得分:0)

据我所知,从一个数据库复制到另一个数据库,但在同一个数据库中从一个表复制到另一个表,这不是一项工作。

你几乎就在那里,改变你的&#34; SELECT ... INSERT&#34;一点:

 $code = mysqli_query($con,"INSERT INTO last90Days SELECT * FROM drugCountsByCharge WHERE countyCode ='9999' AND date >= '$d'");

根据计算,$d从现在开始是90天,因此该条款必须为>= $d

而且,这只有效,如果两个表中的表格布局相同 - 字面意思相同!

否则你可能会使用这样的语句:

   INSERT INTO table_b (field_b_a, field_b_b, field_b_c) 
             SELECT field_a_a, field_a_b, field_a_c from table_a;

(这只是一个例子)

答案 2 :(得分:-1)

希望这会有所帮助,我想

$sql =mysql_query(USE DB_1);
$sql1 =mysql_query(Your select query)
while($res = mysql_fetch_array($sql1)){
  $sql3 = mysql_query(USE DB_2);
  $sql4 = mysql_query(Your Insert Query);
}