2011-04-04 105 views
2
<?phph 
$Q=mysql_query("SELECT case_number,boxes FROM master"); 
    while($arr=mysql_fetch_array($Q)) 

    { 

      $s=trim($arr['case_number']); 

      $noc=trim($arr['boxes']) ; 

      $e=($s+$noc-1); 


     for($x=$s;$s<=$e;$s++) 
      { 


        mysql_query("INSERT INTO master_break (case_number) VALUES('$s')"); 

        $x++; 




     } 

     }?> 
+0

这段代码应该做什么? – cairnz 2011-04-04 08:30:05

+0

我有两个表称为master和master_break。主表包含名为case_number和框的字段..我需要使用主值创建master_break表... 此查询消耗更多时间和内存。如何提高执行速度 – tharindu 2011-04-04 08:35:51

回答

3

有一两件事你可以尝试做的是批量插入。 Insert syntax支持类似:

INSERT INTO master_break (case_number) VALUES (123), (456), ... 

与越来越高的批量尝试,直到你找到适合你的。

1
Insert into master_break(case_number) 
(select case_number from master) 

如果您只需要独特的,添加DISTINCT:

Insert into master_break(case_number) 
    (select distinct case_number from master) 
+0

唯一明智的答案。这里不需要使用慢循环。 (但是选择周围的括号不是必需的) – 2013-02-15 23:25:03

0

使用准备好的语句并将它们全部填入事务中。即:

$pdoHandler->beginTransaction(); 
for (whatever) { 
    $query = $pdoHandler->prepare(whatever); 
    $query->bindParam(whatever); 
    $query->execute(); 
} 
try { 
    $pdoHandler->commit(); 
} catch(PDOException $e) { 
    do whatever; 
} 

这样,你就可以安全地从SQL注入。