2011-12-17 36 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