2011-12-17 37 views
1

比方說,我有一個mysql表一幫一組ID:用PHP更好地刪除MySQL數據庫中的多行?

$idList = array('1','2','3','4','5'); 

我想刪除與每個ID相關的行。哪種方法更可取/更好/更快(IYO)?

$idListString = implode(",",$idList); 
mysql_query("DELETE FROM this_table WHERE id IN ($idListString)"); 

foreach($idList as $value) { 
mysql_query("DELETE FROM this_table WHERE id = '$value'"); 
} 

回答

6

我不是專家,但我相信

$idListString = implode(",",$idList); 
mysql_query("DELETE FROM this_table WHERE id IN ($idListString)"); 

更快。原因是,它只做一個查詢。將更少的數據發送到服務器,並通過一個命令一次處理所有數據。

一般來說,如果您有其他方法,如果您有300個值,則表示您正在進行300次額外的函數調用,300次與服務器的通信等,但實際上可能會有所不同。

編輯:此外,即使您確信數據不是惡意的,您也應該始終使用正確的MySQL轉義。請參閱http://php.net/manual/en/function.mysql-real-escape-string.php並考慮使用mysqli或PDO。

0

第一種方法更快,因爲它在單個語句中刪除多行。

1

我想你應該第一個

$idListString = implode(",",$idList); 
mysql_query("DELETE FROM this_table WHERE id IN ($idListString)"); 

因爲它成本低流量比第二個。在第二種解決方案中,它將MySQL服務器稱爲5次。這意味着

1.Request <--> Response 
2.Request <--> Response 
3.Request <--> Response 
4.Request <--> Response 
5.Request <--> Response 
... 

在我看來,如果你有很多id在forloop它可能會導致瓶頸。

但是,如果您使用第一個,它只有一個Request <---> Response