我使用INSERT INTO SELECT将值(多行)从一个表复制到另一个表。现在,我的问题是如何将来自不同表的表及其对应的ID(由于已被规范化)插入到gerund表中,因为它仅在gerund表中输出一行。我该怎么办才能在gerund表中插入多行及其对应的ID。
我的gerund表代码如下。
$ insert =“插入表1 SELECT * FROM源表”其中id1是table1的pk。
$ result =“ mysqli_query($ conn,$ insert) $ id1 = mysqli_insert_id($ conn);
。
现在表1插入了与其他2个表相同的多行。
。 。
假设id ..是外键
将INSERT INTO gerundtable(pk,id1,id2,id3)值($ id1,$ id2,$ id3);
我的问题是它不会产生多行。
答案 0 :(得分:0)
对于多行插入,LAST_INSERT_ID()和mysql_insert_id()实际上从插入的第一行返回AUTO_INCREMENT键。这样可以在复制设置中的其他服务器上正确复制多行插入。
因此,掌握要复制的记录数和LAST_INSERT_ID()
,您应该能够将精确的IDs
映射到每个复制的行。
在以下行中:
$mysqli->query("Insert Into dest_table Select * from source_table");
$n = $mysqli->affected_rows; // number of copied rows
$id1 = $mysqli->insert_id; // new ID of the first copied row
$id2 = $mysqli->insert_id + 1; // new ID of the second copied row
$id3 = $mysqli->insert_id + 2; // new ID of the third copied row
...
$mysqli->query("INSERT INTO gerundtable (pk, id1,id2,id3) VALUES ($id1,$id2,$id3)");
答案 1 :(得分:0)
感谢您尝试理解并回答我的问题。我解析了自己的代码。我使用了while循环来获取每一行的ID,并且没有使用INSERT INTO SELECT。 这是败笔。因为我只是在裸露我的手机时张贴自己的路线。
$sqlselect = SELECT * FROM table1;
While($row=mysqli_fetch_array(table1){
$insertquery...
$id1=mysqli_insert_id($conn)
$insertgerundtable = INSERT INTO gerundtable VALUES ( $id1, $id2);
}