Php mysql\u fetch\u行未返回新更新的行
我在mysql中有一个如下所示的表-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
++++++++++++
+ 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