2013-12-23 94 views
3

我想知道如果這是可能的,我已經搜索,並沒有發現任何如此放棄。PHP插入/更新多行,使用數組而不是foreach

我正在尋找下面的例子,注意我不想使用foreach,因爲它將它轉換爲單個查詢。

$a = (1,2,3); 
$b = ('john','Rob','Stuffs'); 
$c = ('doe','roe','soe'); 

$sql = "update ppl set firstname = $b, lastname = $c where id = $a"; 

同樣可以說是插入。

$sql = "insert into ppl (firstname,lastname) value ($b,$c)"; 

我期待這樣做的主要原因是優化db一點。有很多單個查詢(如果這種方法是可能的話)可以被轉換成單個查詢。

在此先感謝。

+1

'插入表值(),(),()' –

+0

好酷可以做同樣的更新? – Rob

+1

請參閱此鏈接http://stackoverflow.com/questions/11664684/how-to-bulk-update-mysql-data-with-one-query,它應該幫助你 –

回答

4
if (count($a) <= 0) 
    return; // nothing to do 

$sql = "INSERT INTO table (id, firstname, lastname) VALUES"; 
while (count($a) > 0) 
{ 
    $id = array_shift($a); 
    $fname = array_shift($b); 
    $lname = array_shift($c); 

    $sql .= sprintf("('%s', '%s', '%s'),", mysql_real_escape_string($id), mysql_real_escape_string($fname), mysql_real_escape_string($lname)); 
} 
$sql = substr($sql, 0, -1); //remove last comma 

$sql .= " ON DUPLICATE KEY UPDATE firstname=VALUES(fname), lastname=VALUES(lname)"; 

//run your sql 

這將允許你同時運行所有的人。

+0

乾杯謝謝,只是爲了增加答案,更新可以用Siraj Khan在最初的問題下做出的評論完成。他指向我們http://stackoverflow.com/questions/11664684/how-to-bulk-update-mysql-data-with-one-query – Rob

0

對於更新,你可以做如下

$a = (1,2,3); 
    $b = ('john','Rob','Stuffs'); 
    $c = ('doe','roe','soe'); 

    $i=0; 
    foreach($b as $fname){ 
     if(!empty($b[$i])) 
     { 
      $sql = "update ppl set firstname = '".$b[$i]."', lastname = '".$c[$i]."' where id = $a[$i]"; 
     } 
    $i++; 
    } 

和插入你可以嘗試

$i=0; 
    $var = ''; 
    foreach($b as $fname){ 
     if(!empty($b[$i])) 
     { 
      $var .= "(".$a[$i].",'".$c[$i]."','".$b[$i]."') "; 
     } 
     $i++; 
    } 
    if(!empty($var)){ 
     $sql = "insert into ppl(id,firstname,lastname) values ".$var; 
    } 
+0

好吧,如果沒有foreach,就無法進行更新。所以他們每次都會單個查詢? – Rob

+0

更新不可能在單個查詢中做 –