2011-04-04 103 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注入。