Mysql 从旧表导入不同结构的新表

Mysql 从旧表导入不同结构的新表,mysql,import,Mysql,Import,我的旧桌子大约有600列。让我们把这个表称为旧表 我的新表有603列。让我们把这个表称为新表 现在,为了将数据从旧表导入新表,我尝试了以下方法: $q = mysql_query("SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'databasename' AND TABLE_NAME = 'old_table'"); $cols = array(); while($

我的旧桌子大约有600列。让我们把这个表称为旧表

我的新表有603列。让我们把这个表称为新表

现在,为了将数据从
旧表
导入
新表
,我尝试了以下方法:

$q = mysql_query("SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS 
              WHERE TABLE_SCHEMA = 'databasename' AND TABLE_NAME = 'old_table'");

$cols = array();
while($r = mysql_fetch_array($q))
{   
   $cols[] = $r['COLUMN_NAME'];     
}

$sql = "INSERT INTO new_table ";
$sql .= "SELECT ";
$sql .= implode(", ", $cols);
$sql .= " FROM old_table";

mysql_query($sql) or die("Something went wrong: ".mysql_error());
但这会导致
列计数与第1行的值计数不匹配,因为查询还考虑了
新表
的3个新列


有没有办法让它跳过
新表
中的附加列,插入
旧表
中的所有数据。您可以为新列提供默认值并将其添加到insert语句中,也可以命名要插入的列

$sql = "INSERT INTO new_table ";
$sql .= "SELECT ";
$sql .= implode(", ", $cols);
$sql .= ", value_for_new_column_1";
$sql .= ", value_for_new_column_2";
$sql .= ", value_for_new_column_3";
$sql .= " FROM old_table";


对。您可以为新列提供默认值并将其添加到insert语句中,也可以命名要插入的列

$sql = "INSERT INTO new_table ";
$sql .= "SELECT ";
$sql .= implode(", ", $cols);
$sql .= ", value_for_new_column_1";
$sql .= ", value_for_new_column_2";
$sql .= ", value_for_new_column_3";
$sql .= " FROM old_table";


我想您忘了在数组中放入元素,比如
$I=0$科尔斯[$i]=$i+=1我不认为这是一个必要的步骤,不是吗?我想你忘了在数组中放入元素,比如
$I=0$科尔斯[$i]=$i+=1我不认为这是一个必要的步骤,不是吗?难以置信!我怎么会错过这么简单的一件事呢。太糟糕了,因为声誉限制,我不能投票。无论如何,我会接受一点作为答案,因为它不允许我现在这样做。第一种方法是不可取的,因为这将是太多的工作与600列汉克表!实际上,您只需要为新列提供默认值,而不是为所有列提供默认值。看我的第一个例子,难以置信!我怎么会错过这么简单的一件事呢。太糟糕了,因为声誉限制,我不能投票。无论如何,我会接受一点作为答案,因为它不允许我现在这样做。第一种方法是不可取的,因为这将是太多的工作与600列汉克表!实际上,您只需要为新列提供默认值,而不是为所有列提供默认值。参见我的第一个示例。