根据日期自动更新MYSQL表

时间:2010-09-28 13:44:54

标签: php mysql modeling

我有一个MYSQL表来保存事件信息。我需要一种机制,根据日期更新每个事件的状态(如果是过去的日期,则“超过”)。 做这种事的最好办法是什么?当任何用户登录时(大多数用户无用的例程),创建某种内部任务(如cron作业?)或任何其他方式,更新事件的状态。 现在,只有在创建者登录时才会更新事件的状态。这样可行,但是另一个用户会将事件视为“已安排”,直到创建者登录,即使日期已过。我顺便使用PHP。感谢

5 个答案:

答案 0 :(得分:1)

我建议在请求状态时随时更新状态。或者更好的是,甚至根本不将状态存储在数据库中,而是根据其他变量在每次请求时计算它。因此,只要您有表格状态或某人请求状态,只需记下事件日期,将其与今天的日期进行比较,然后将其发送“未开始”,“正在进行”或“结束”。

除非您需要更多可能的状态(“计划”,“准备”,“设置”等)。然后,您需要为每个状态定义日期/时间,或者您需要存储状态变量。无论哪种方式,您都可以在请求时更新状态(根据今天的日期和任何其他相关信息)。

答案 1 :(得分:0)

在用户登录时更新不是一个好主意,因为它增加了太多的压力(如果有很多用户)。这样做的最好方法是每天晚上12点之后/或在一天开始时运行cronjob。如果您仍想保留旧代码,请使用日期代码将其包装起来。 伪将看起来像:

$updated_last = last modification time of the file "updated";
if($updated_last is more than 1 day) {
 update db; (your old code)
 touch file "updated";
}

答案 2 :(得分:0)

使用此,

UPDATE events SET status = 'over' WHERE DATE(event_date) > NOW();

每天运行一次,每天一次,cron

答案 3 :(得分:0)

除非你必须处理很多时区,否则我会选择午夜的cron工作。重新计算似乎相当浪费,并且从维护的角度来看,按需计算会变得相当混乱,因为它会使数据库处于部分不正确的状态。

答案 4 :(得分:0)

每个答案都接受您更新的原因。 但是,让我质疑这个决定,并延伸到Srapnel上校的建议。

更新可以被视为浪费资源,因为您可以在运行时使用内存日期比较计算它(比存储的I / O快几个数量级)。

有两种方法:

  • 查询/查看可以做到这一点(成本应该可以忽略不计)
  • 实际上在检索结果之后在php端执行此操作(将其视为格式化/演示文稿任务)
  • 它甚至可以在客户端完成,如果可能的话,性能方面是最好的解决方案(这可能会导致维护/安全问题)

当然,忽略这些解决方案可能有正当理由,但我认为性能本身是不够的(大多数数据库都受I / O限制)。