转换MySQL表和行

时间:2013-02-18 00:18:47

标签: php mysql database pivot

我在这里遇到一个问题,我甚至不知道谷歌应该怎么解决这个问题。 我正在制作PHP应用程序,以便将数据从一个MySQL表导出到另一个MySQL表。我对这些表格有疑问。

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

Source table

我的目标表有ID,pr0,pr1,pr2是行。所以它看起来像这样: enter image description here

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

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

我需要知道如何在PHP或MySQL中实现它。

1 个答案:

答案 0 :(得分:0)

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

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结构的小东西,打印这个和PASTE到PHPmyADMIN或你的数据库查询并看到它的一切都很好,但这个概念会产生很多问题..