我正在使用PHP向我的MySQL数据库添加95个新行并返回新的行ID。执行时间大约需要24秒。如果我超过30秒,PHP将停止执行(默认时间限制为30秒)。
我需要返回插入的每一行的行ID,以便我可以使用它来安装相关数据。
我目前的解决方案是:
/* snippets from my class objects to illustrate my code */
// This foreach takes 24 seconds on just 95 rows
foreach($list as $row) {
$id = $this->importRows($sid,$table)
array_push($id_list,$id);
}
/* PDO insertion */
protected function importRows($row) {
$sql = "INSERT INTO my_table (name, colour)
VALUES $row['name'], $row['colour']";
$result = $this->db->exec($sql);
return $this->db->lastInsertId();
}
为减少插入时间,我希望我可以在一个查询中插入多行 根据{{3}}(向下滚动到红色的lind和“重要”一词),它说:
如果使用单个INSERT语句插入多行, LAST_INSERT_ID()返回为第一个插入生成的值 只排。
他们建议的解决方案是创建另一个表并插入新的ID,然后我可以通过最后的select语句获取新的id。
有没有人参与类似的解决方案?关于如何使这个时间更有效的任何建议?
答案 0 :(得分:3)
这是我以前在这种情况下使用的技巧:
$query = "INSERT INTO my_table (name, colour) VALUES";
$i = 0;
foreach( $rows as $row ) {
if( $i ) $query .= ',';
$query .= " ( $row[ 'name' ],
IF( @id$i := LAST_INSERT_ID(), $row[ 'colour' ], $row[ 'colour' ] ) )";
++$i;
}
$result = $this->db->exec( $query );
然后有这样的查询来获取ID:
SELECT @id1, @id2, @id3, ...
答案 1 :(得分:0)
id[n]=last_insert_id+n
,其中n是插入行的编号