带有多个记录的LAST_INSERT_ID()插入MySQL

时间:2014-03-17 10:40:01

标签: php mysql sql database

我有一个sql多个记录INSERT,'id'字段设置为AUTO_INCREMENT,如下所示:

 INSERT INTO table1 VALUES (null, "bla"),(null, "bla"),(null, "bla"),(null, "bla") etc..;

然后我有另外两个记录INSERT:

INSERT INTO table2 VALUES (null, "bla"),(null, "bla"),(null, "bla"),(null, "bla") etc..;

现在我希望table2的'id2'与table1相同,但我不知道如何记住table1中的所有last_insert_ids以将它们插入table2,如果我使用LAST_INSERT_ID()它只给我第一个插入值的'id'。 有谁知道如何获取所有last_insert_ids?

3 个答案:

答案 0 :(得分:0)

如果我理解正确,第二个表中的索引是对第一个表中索引的引用(如FK)。 在这种情况下,你可以:

  1. 在第一张表中插入记录
  2. 获取last_insert_id()并将其存储在数组中
  3. 循环1-2'直到你完成
  4. 使用数组值构建插入查询
  5. 在PHP中,这将是:

    var arrInserted = array();
    
    foreach($newRecords as $newRecord) {
     $sql = "INSERT INTO table1 ($newRecord->valBlah);";
     $stmt = $dbh->prepare($sql);  
     $stmt->execute();
    
     $sql = "SELECT LAST_INSERT_ID() AS myNewID;";
     $stmt = $dbh->query($sql);  
     arrInserted[] = $stmt->fetchColumn();
     }
    
    if(count($arrInserted) > 0) {
     var $arrAddValues = array();
     foreach($arrInserted as $newID) 
       $arrAddValues[] = '(' . $newID . ',' $anyBlahValue . ')';
     $sql = "INSERT INTO table2 (field1, field2) VALUES " . implode(',', $arrAddValues) . ";";
     $stmt = $dbh->prepare($sql);  
     $stmt->execute();
    }
    

    好的,不是那么漂亮且未经测试但它应该给你一个想法...... 在敲入$ arrAddValues时要注意查询大小,我相信MySQL有一个限制,其他人也可以。

    HTH, 皮疹*

答案 1 :(得分:-1)

您无法为最后一次插入ID返回多个ID。 MySQL故意以这种方式工作(参见MySQL docs)。

你应该知道你的自动增量值(例如1)所以如果你知道你要插入5行,你将使用第一行的最后一个插入ID,以及第五行的last insert id + 5

答案 2 :(得分:-1)

尝试使用LAST_INSERT_ID()+插入次数(-1)的简单方法。如果你使用本机mysql自动增量,你应该得到一个正确的结果。

如果您在一个事务中插入数据,则值应该在一行中。

看看这里如何解决你的问题: http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id