1

titles_idという名前のAUTO_INCREMENT主キーを使用してtitlesという名前のテーブルに映画が挿入される映画データベースがあります。ユーザーは、titles_anonという名前の別の同一のテーブルに挿入された映画を匿名で送信できます。titles_anonのエントリを確認した後、それらをタイトルに挿入したいのですが、id列が問題を引き起こしています

私はこれを試しました:

INSERT INTO titles SELECT * FROM titles_anon WHERE title_id ='$ title_id';

キーの重複エラーが発生するか、title_idがまだタイトルに存在しない場合はOKを挿入しますが、必要な新しいAUTO_INCREMENT値の代わりにtitles_anonidを使用します。

両方のテーブルにAUTO_INCREMENT主キーがある場合、テーブル間で行をコピーするにはどうすればよいですか?

4

5 に答える 5

3
INSERT INTO titles 
(column_name1, column_name2, column_name3, column_name4,...)
SELECT title_id, col2, col3, col4,..
FROM titles_anon
WHERE title_id = '$title_id';
于 2012-05-25T03:47:11.727 に答える
0

列を完全に省略してid、mysqlに生成させることができます。挿入する正確な列を指定するには、もう少し長いSQLが必要です。

INSERT INTO titles (columns-other-than-the-primary-key) 
    SELECT columns-of-the-same-order FROM titles_anon
于 2012-05-25T03:46:39.987 に答える
0

SELECTでフィールドを定義しますが、PKを省略し、同じフィールドをINSERTに追加します。

于 2012-05-25T03:47:48.707 に答える
0

PHPでは、次のようなことができます。

$rs = mysql_query("select * from table_orig where RowID=$IDToCopy",$db_conn);
 $row = mysql_fetch_assoc($rs);
 $sql = '';
 $fields = '';
 foreach($row as $k => $v){
  if($k == "RowID") continue;
  $sql .= ",'$v'";
  $fields .= ",$k";
 }
 $sql = "insert into table_copy (".substr($fields,1).") values (".substr($sql,1).")";
 mysql_query($sql,$db_conn);
于 2014-04-30T14:35:43.220 に答える
0

/*主キーを持つテーブルを別のテーブルにコピーします*/

$ table_old ='colaboradores'; //古いテーブル

$ table_new ='colaboradores2'; //新しいテーブル

//主キーなしですべての列をSQLします(column_key <>'pri'

$ rs = mysql_query( "select column_name from INFORMATION_SCHEMA.COLUMNS where table_name ='$ table_old' and column_key <>'pri' AND table_schema ='your database'");

//すべての列を取得します

$ rows = mysql_fetch_assoc($ rs);

$ fields ='';

//フィールドを
foreachにマウントします($ rows as $ k => $ v){
$fields。="、$ v [0]";
}

//最初のカンマを削除します
$fields= substr($ fields、1);

echo"Mysqlでテーブルを作成するための構文";
echo "CREATE TABLE $ table_new SELECT $ fields FROM $ table_old";
echo"古いテーブルから新しいテーブルMysqlへの挿入の構文";
echo "INSERT INTO $ table_new $ fields SELECT $ fields FROM $ table_old";

于 2015-04-11T14:34:48.873 に答える