首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MySql命令中用foreach循环加快执行速度

在MySql命令中用foreach循环加快执行速度
EN

Stack Overflow用户
提问于 2013-12-12 15:28:23
回答 3查看 712关注 0票数 0

我有一个PHP语句,它循环遍历大量的foreach

对于每个图标,需要更新DB列sequence。详情如下:

代码语言:javascript
复制
foreach ($icons as $key => $icon) {
    // MySql pseudo-code:
    UPDATE `tbl_icon2album` 
    SET `sequence`= $key +1 
    WHERE iconID= $icon['id']       
}

My problem:对于大量的图标来说,这变得非常慢。

我的问题:我可以通过执行一个MySql命令来加快速度吗?这个命令将以某种方式包含foreach循环吗?

非常感激..。

EN

回答 3

Stack Overflow用户

发布于 2013-12-12 15:38:39

您可以将所有更新放在另一个表中,并使用单个查询进行更新。

代码语言:javascript
复制
 UPDATE tbl_icon2album, some_other_table
 SET    sequence = some_other_table.new_key_value
 WHERE  iconID = some_other_table.icon_reference
票数 3
EN

Stack Overflow用户

发布于 2013-12-12 15:50:05

您正在更新多少个键?是迭代速度慢,还是您做了数千次?

你可以用"in“子句。

ie:

代码语言:javascript
复制
 update table set key=key+1 where blah in ('1','2','3');

您可以遍历for循环来构造传递给in的变量:

ie:

代码语言:javascript
复制
 $iconlist = "";
 foreach ($icons as $key => $icon) {
   if (!$iconlist) { $iconlist = "($icon" }
   else 
   { $iconlist .= ",$icon" }
 }
 if ($iconlist) { 
   $iconlist .= ")";
   $query = "update table set key=key+1 where icon in $iconlist";

 }
票数 1
EN

Stack Overflow用户

发布于 2013-12-12 15:35:39

如果使用准备好的陈述,则可以准备查询一次,绑定参数,然后在循环中执行。这可能会更快,因为它通常是准备占用时间的查询。例如:

代码语言:javascript
复制
$stmt = $mysqli->prepare("

  UPDATE
    `tbl_icon2album`
  SET
    `sequence` = ?
  WHERE
    `iconID` = ?

");

$stmt->bind_param('ii', $sequence, $icon_id);

foreach ($icons as $key => $icon)
{

  $sequence = $key + 1;

  $icon_id = $icon['id'];

  $stmt->execute(); 

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20547486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档