我有一个MYSQL
表来保存事件信息。我需要一种机制,根据日期更新每个事件的状态(如果是过去的日期,则“超过”)。
做这种事的最好办法是什么?当任何用户登录时(大多数用户无用的例程),创建某种内部任务(如cron作业?)或任何其他方式,更新事件的状态。
现在,只有在创建者登录时才会更新事件的状态。这样可行,但是另一个用户会将事件视为“已安排”,直到创建者登录,即使日期已过。我顺便使用PHP
。感谢
答案 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)
答案 3 :(得分:0)
答案 4 :(得分:0)
每个答案都接受您更新的原因。 但是,让我质疑这个决定,并延伸到Srapnel上校的建议。
更新可以被视为浪费资源,因为您可以在运行时使用内存日期比较计算它(比存储的I / O快几个数量级)。
有两种方法:
当然,忽略这些解决方案可能有正当理由,但我认为性能本身是不够的(大多数数据库都受I / O限制)。