Php mysql使用一条语句更新数千行

Php mysql使用一条语句更新数千行,php,mysql,Php,Mysql,我有一个表,它有超过200000行,并且正在增长,需要在给定的时间间隔进行更新 我以前是用for-each循环来完成的,直到最近才开始工作。现在我遇到了php超时问题 更新非常简单。它使用行的唯一id并更新数量 我查看了用例,但似乎可以更新多少行是有限制的 任何建议都将不胜感激。好吧,这是一种冒险。你提到“更新数量”。你可以从几个角度考虑 在代码中,确定需要更新的唯一“数量” 假设您有20万个产品需要更新,但库存水平往往保持在0到50之间 那么您就只有大约50条SQL语句可以执行了。然而,它们可

我有一个表,它有超过200000行,并且正在增长,需要在给定的时间间隔进行更新

我以前是用for-each循环来完成的,直到最近才开始工作。现在我遇到了php超时问题

更新非常简单。它使用行的唯一id并更新数量

我查看了用例,但似乎可以更新多少行是有限制的


任何建议都将不胜感激。

好吧,这是一种冒险。你提到“更新数量”。你可以从几个角度考虑

  • 在代码中,确定需要更新的唯一“数量”

    假设您有20万个产品需要更新,但库存水平往往保持在0到50之间

    那么您就只有大约50条SQL语句可以执行了。然而,它们可能在附加的语句中有相当大的连接。FOR循环的核心部分如下所示:

    $s = "update myTable set quantity = 10 where id in (124,1215,1232,4444,4532,46789);";
    $r = $db->query( $s );
    
  • 另一种方法是拥有数据的本地副本,以及 仅提交数量已减少的产品的增量 自更新以来实际发生了更改。也就是说,对于所有 增加1,连接产品ID,并执行以下操作:

    $s="UPDATE myTable SET quantity = (quantity + 1) WHERE id IN (124,1215,1232,4444,4532,46789)";
    
    $r = $db->query( $s );
    
  • 在语句中实现这些连接并不十分困难。假设我们有$array\u的\u id\u,它以\u 5的速度上升了\u:

    $in_statement = "( ".implode(",",$array_of_ids_that_went_up_by_5)." );
    
    您可能需要在结尾处添加一个逗号


    应该比200K SQL语句更高效。

    在一个查询中可以更新多少行没有限制;但是使用循环将是非常低效的。您需要发布一些代码,以便我们有机会提供任何帮助。您需要对数据应用什么样的更改?仅当200000个更改中的每一个都是唯一的时,才使用for循环进行此操作。经验教训。永远不要在循环内执行查询。