我有一个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?
答案 0 :(得分:0)
如果我理解正确,第二个表中的索引是对第一个表中索引的引用(如FK)。 在这种情况下,你可以:
在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