2

我这里有一个问题,我什至不知道谷歌是什么以及如何解决这个问题。我正在制作 PHP 应用程序以将数据从一个 MySQL 表导出和导入到另一个表中。我对这些表有疑问。

在源表中它看起来像这样:

源表

我的目标表有 ID,并且 pr0、pr1、pr2 作为行。所以它看起来像这样: 在此处输入图像描述

现在问题如下:如果我只是复制(将第一个表的每个值插入第二个新行)它将有 20.000 行,而不是 1000 行。

即使我将每条记录复制为第二个数据库中的新行,有什么方法可以融合行吗?基本上我需要检查具有该 ID_ 的最后一行中是否存在值,如果它存在于该行和列(例如 pr2)中,则插入新行,但如果具有相同 ID_ 的最后一行在 pr2 列中没有值,只需使用 pr2 列中的值更新该行。

我需要知道如何在 PHP 或 MySQL 中做到这一点。

4

1 回答 1

0

所以你遇到了一些问题: 1) 将表从 SQL 复制到 PHP,注意内存使用情况,使用 PHP 命令 Memory_usage() 运行你的脚本。它会告诉你导入 SQL 数据可能很昂贵。看看这个。另一件事是 PHP 在将新值设置为数组时不会释放内存。以后会有用的。

2)我不明白这些值在源表中是唯一的还是在目标表中应该是唯一的。所以我会假设所有源都需要按原样在目标上。我还将假设 pr = pr0 和 quant=pr1。

3)你有不匹配的名字..这也可能是一个问题。会照顾的..也。

4) 将使用 My_sql,因为 SQL 连接器..和 $db 已连接.. 脚本:

 <?PHP
   $select_sql = "SELECT * FROM Table_source";
   $data_source = array();
   while($array_data= mysql_fetch_array($select_sql)) {
        $data_source[] = $array_data;   
         $insert_data=array();
   }
   $bulk =2000;
   foreach($data_source as $data){
     if(isset($start_query) == false)
      {
          $start_query = 'REPLACE INTO DEST_TABLE ('ID_','pr0','pr1','pr2')';
      }
     $insert_data[]=implode(',',$data).',0)';// will set 0 to the
     if(count($insert_data) >=$bulk){
        $values = implode('),(',$insert_data);
        $values = substr(1,2,$values);
        $values = ' VALUES '.$values;
        $insert_query = $start_query.' '.$values;
        $mysqli->query($insert_query);
        $insert_data = array(); 
     } //CHECK THE SYNTAX IM NOT SURE OF ALL OF IT MOSTLY THE SQL PART>> SEE THAT THE QUERY IS OK 
   }
   if(count($insert_data) >=$bulk) // IF THERE ARE ANY EXTRA PIECES..
      { 
        $values = implode('),(',$insert_data);
        $values = substr(1,2,$values);
        $values = ' VALUES '.$values;
        $insert_query = $start_query.' '.$values;
        $mysqli->query($insert_query);
        $insert_data = null; 
     }  
  ?>

它离开了我的头,但检查这个想法并告诉我这是否有效,错误之夜是我忘记了 QUERY 结构的小东西,打印这个并粘贴到 PHPmyADMIN 或你的数据库查询,看看它都很好,但是这个概念会解决很多问题..

于 2013-02-18T02:13:53.477 回答