1

私の古いテーブルには約 600 列ありました。このテーブルを としましょうold_table

新しいテーブルには 603 列あります。このテーブルを としましょうnew_table

old_tableからにデータをインポートするためにnew_table、次のアプローチに従ってみました。

$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());

しかし、これはColumn count doesn't match value count at row 1、クエリが の 3 つの新しい列も考慮に入れているためですnew_table

の追加の列をスキップしてnew_tableからすべてのデータを挿入する方法はありold_tableますか?

4

1 に答える 1

1

はい。新しい列のデフォルト値を指定して挿入ステートメントに追加するか、挿入先の列に名前を付けることができます。

$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";

$sql = "INSERT INTO new_table ";
$sql .= "(" . implode(", ", $cols) . ")";
$sql .= "SELECT ";
$sql .= implode(", ", $cols);
$sql .= " FROM old_table";
于 2013-11-07T09:05:05.610 に答える