我在这里遇到一个问题,我甚至不知道谷歌应该怎么解决这个问题。 我正在制作PHP应用程序,以便将数据从一个MySQL表导出到另一个MySQL表。我对这些表格有疑问。
在源表中,它看起来像这样:
我的目标表有ID,pr0,pr1,pr2是行。所以它看起来像这样:
现在问题如下:如果我只是复制(将第一个表的每个值插入第二个中的新行)它将具有20.000行,而不是例如1000个。
即使我将每条记录复制为第二个数据库中的新行,有什么方法可以融合行?基本上我需要检查最后一行中是否存在具有该ID_的值,如果它存在于该行和列中(例如pr2)然后插入新行,但是如果具有相同ID_的最后一行在pr2列中没有值,只需用pr2列中的值更新该行。
我需要知道如何在PHP或MySQL中实现它。
答案 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或你的数据库查询并看到它的一切都很好,但这个概念会产生很多问题..