Php mysql\u fetch\u行未返回新更新的行

Php mysql\u fetch\u行未返回新更新的行,php,mysql,Php,Mysql,我在mysql中有一个如下所示的表- ++++++++++++ + my_table + ++++++++++++ id is_done ++++++++++++ <?php $q=mysql_query("SELECT * FROM my_table WHERE is_done=0"); while($res=mysql_fetch_assoc($q)){ $id=$res['id']; //do something lengthy sleep(60); mys

我在mysql中有一个如下所示的表-

++++++++++++
+ my_table +
++++++++++++
id
is_done
++++++++++++
<?php

$q=mysql_query("SELECT * FROM my_table WHERE is_done=0");

while($res=mysql_fetch_assoc($q)){
  $id=$res['id'];
  //do something lengthy
  sleep(60);  
  mysql_query("UPDATE my_table SET is_done=1 WHERE id='$id'");
}

?>
我有一个PHP脚本,它执行如下操作-

++++++++++++
+ my_table +
++++++++++++
id
is_done
++++++++++++
<?php

$q=mysql_query("SELECT * FROM my_table WHERE is_done=0");

while($res=mysql_fetch_assoc($q)){
  $id=$res['id'];
  //do something lengthy
  sleep(60);  
  mysql_query("UPDATE my_table SET is_done=1 WHERE id='$id'");
}

?>

你为什么不把这个简单的东西放进去呢。使用睡眠的目的是什么

mysql_query("UPDATE my_table SET is_done=1 WHERE is_done=0");
您不必在整个表中查询并逐个更改

如果需要使用睡眠,请尝试以下方法:

mysql_query("UPDATE my_table SET is_done=1 WHERE is_done=0 and id='$id'");

如果您担心调用不必要的sql语句,我建议将id聚合到一个数组中,并在循环外更新(性能):


您在while中,while获取已捕获的结果。这就是为什么你没有得到最新鲜的。要执行此操作,必须重新获取。是否使用事务管理。什么类型的
my_table
?如果您正在做一些非常长的事情(我注意到您有一个
sleep(60)
-一分钟的实际情况?),那么您只需在循环的每个迭代开始时查询数据库中的一行(
LIMIT 1
)。如果您实际上只讨论了几分之一秒,那么该行只需等待对该脚本的下一次调用,然后再进行处理,因为您可能不想快速连续多次重新查询数据库。如果您只想使用“最新数据”,则只需使用
限制1
,和每行处理一行。另外,我根本不会使用
mysql.*
(检查文档为什么)。我也根本不会叫
sleep
。如果一次又一次地使用
LIMIT
进行查询太慢(可能是这样),您可以在更新之前查询表,查看
是否已完成
字段是否仍设置为0