在特定时间更新特定列的值

时间:2011-12-11 01:24:18

标签: php mysql

假设我有一张这样的表

 ID |      DATETIME       | VALUE
 1  | 2011-12-10 01:22:46 |   NO

例如真正的DATETIME现在是2011-12-10 00:22:46 我希望当DATETIME与桌面上的DATETIME相同时,VALUE更新为YES。

怎么做?

3 个答案:

答案 0 :(得分:1)

使用jquery ajax对服务器进行检测,每次让半秒钟才能使用,如果发生延迟

1-下载jquery或在线提供

2-在一个始终打开的页面中右边这个我将给出另一个解决方案,如果它没有打开

function updater()
{
    $.post('ajaxChecker.php');

}

setInterval( "updater()", 50 );

上面的代码向名为ajaxChecker.php的页面发送请求 然后您需要在该页面中连接到数据库 我现在就假设你 并在那 提出查询

$query = mysql_query("UPDATE tlbname SET `value` = 'YES' WHERE `datetime` = NOW()

“);

请检查mysql的保留字,如果不能修改它们,请确保它们在``

之间

阅读cronjobs来启动它

答案 1 :(得分:0)

如果你包括时间hh:mm:ss它将很难匹配..但否则它会像:

update tlbname set value = 'YES' where datetime = @datetime

答案 2 :(得分:0)

或许最好的解决方法是不要更新列:

ALTER TABLE tblname DROP COLUMN value;

ALTER TABLE tblname RENAME TO basetbl;

CREATE VIEW tblname AS
  SELECT id,
         `datetime`,
         IF(NOW() >= `datetime`, 'YES', 'NO') AS value
    FROM basetbl;

现在`value`永远不会出错,并且它会在当前时间与`datetime`中的yyyy-mm-dd_hh:mm:ss匹配的瞬间更新。

或者,可以使用查找IF(NOW() >= `datetime`, ...)的查询将此动态计算推送到PHP代码中。

天真的方法存在的问题,即每分钟或更长时间发出UPDATE的问题,是您会错过更新。任何定期的UPDATE计划 - crond,一个AJAX帮助程序,MySQL的EVENT计划程序,无论如何 - 最终都会错过任何一个节拍。也许操作系统崩溃,或MySQL重新启动,或者非常合理地,MySQL变得如此负载其他查询,UPDATE需要花费一分多钟才能完成。

即使UPDATE被修改为追溯更正错过的更新,仍会有一个`value`错误的窗口。