我有一個表在MySQL類似如下─和mysql_fetch_row沒有返回新更新的行
而且我有一個PHP腳本執行類似如下─
<?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中一行,併爲該行設置is_done=1
,該腳本仍處理該行。我如何調整我的腳本以從mysql讀取新的和更新的行並跳過同時標記爲完成的任何行?
你在獲取已經捕獲的結果的同時。這就是爲什麼你沒有得到最新鮮的。要做到這一點,你必須再次獲取。 – fedorqui 2013-02-26 10:36:07
您是否使用交易管理。什麼類型的my_table? – triclosan 2013-02-26 10:36:20
如果你正在做一些真的很長的事情(我注意到你有一個「sleep(60)」 - 是一個現實的一分鐘),那麼你只需在數據庫的開始處查詢一行('LIMIT 1')循環的每次迭代。如果您實際上只是在談論幾分之一秒,那麼該行將不得不等待在處理該腳本之前對該腳本進行下一次調用,因爲您可能不希望快速連續多次重新查詢該數據庫。 – DaveRandom 2013-02-26 10:42:10