使用Insert Into Select在Gerund表中插入多个行

时间:2019-02-09 20:38:51

标签: mysqli phpmyadmin

我使用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);

我的问题是它不会产生多行。

2 个答案:

答案 0 :(得分:0)

根据MySql documentation

  

对于多行插入,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);
}