我有一个包含事件信息的MYSQL
表。我需要一种机制,根据它的日期更新每个事件的状态(如果它过去的日期是“over”)。 做这样的事情最好的办法是什么?更新任何用户登录时的事件状态(对大多数用户而言无用的例程),创建某种内部任务(如cron作业?)或任何其他方式。 现在,只有当创建者登录时,事件的状态才会更新。这可以工作,但是另一个用户会将事件视为“已计划”,直到创建者登录,即使日期已过。顺便使用PHP
。谢谢根据日期自动更新MYSQL表
回答
我建议任何时候状态请求时更新状态。或者更好的是,根本不要将状态存储在数据库中,而只是根据其他变量在每次请求时计算它。这样,无论何时你有一个表格列表状态或某人请求状态,只需将事件日期,与今天的日期进行比较,并将它们发送到“未开始”,“正在进行”或“结束”。
除非你需要更多可能的状态(“计划”,“准备”,“设置”等)。然后,您需要为这些状态中的每个状态计划日期/时间,否则您需要存储状态变量。无论哪种方式,您都可以在请求时更新状态(根据当天的日期和任何其他相关信息)。
根据要求更新是绝对要走的路。不将数据存储在数据库中会使一切变得更加复杂。列出过去的事件是应用程序中的常见任务,每次请求列表时都需要进行大量处理。有很多事情取决于事件的状态。不过谢谢。 – JoaoPedro 2010-09-28 23:13:13
@JoaoPedro,根据事件状态存在“太多东西”的事实并不一定证明在DB中存储额外的数据是正确的 - 实际上恰恰相反;大多数数据库系统都是I/O绑定的,这意味着他们正在等待数据被读取和写入存储器,并且向混合中添加额外的不必要和非常便宜的可计算列将通常减慢(!)系统。对于单个领域(加上索引)而言不是太多,但如果作为一个原则来使用,那么它会叠加起来。 – Unreason 2011-01-31 15:37:53
在用户登录时更新并不是一个好主意,因为它增加了太多的压力(如果有很多用户)。做到这一点的最佳方式是在上午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";
}
除非你必须处理很多时区,否则我会选择午夜cron作业。重新计算似乎相当浪费,并且从维护角度来看,按需计算可能会变得相当混乱,因为它会使数据库处于部分不正确的状态。
每个答案接受你的更新理由。 但是,让我质疑这个决定,并延续了Srapnel上校的意见。
更新可以被视为浪费资源,因为您可以在内存日期比较(这比存储器的I/O更快的数量级)上计算它。
有两种方法可供选择:
- 查询/视图可以做到这一点(和成本确实应该忽略不计)
- 其实这样做对PHP端结果检索后(认为这是一个格式/演示任务)
- 它甚至可以在客户端,其中如果可能的话,性能方面将是最好的解决方案做了(这可能导致维护/安全问题)
当然,可能存在忽略这些解决方案的正当理由,但我认为其本身的性能还不够(大多数数据库都是I/O绑定的)。
- 1. MySQL自动更新日期字段
- 2. 根据空日期字段在mysql中更新日期格式
- 3. 如何根据日期自动更新数据库?
- 4. Rails表单:根据日期集自动设置未来日期
- 5. SQL新日表根据日期
- 6. MySQL/PHP - 根据日期更改状态
- 7. 根据当前日期更新'日期'数据
- 8. MySQL - 根据日期加入
- 9. 根据日期查询mysql
- 10. MySQL:根据来自A和B表的数据更新表A
- 11. MySQL自动更新表数据
- 12. 根据当前时间更新MySQL中日期的方法?
- 13. 根据日期自动编辑行
- 14. 宏数据透视表自动更新日期和名称
- 15. 在MS Access中可以根据日期标准自动更新数据吗?
- 16. 表更新日期时间自动更新:MS SQL08
- 17. 根据日期自动执行操作。 Php/Mysql
- 18. 根据MySQL日期发送自动电子邮件
- 19. 使用mysql根据日期字段自动删除行
- 20. 更改列表颜色根据日期
- 21. 如何根据来自其他日期的输入更新日期?
- 22. 根据mysql表列日期选择datetimepicker日期(c#)
- 23. 根据已知日期随机更新日期时间字段
- 24. 根据日期范围更改MySQL表中的值
- 25. mysql数据库更新日期
- 26. 根据参数和最后一行日期在临时表中更新日期
- 27. 比较上次日期和当前日期并根据条件更新表格
- 28. 在mySql中更新日期
- 29. MySQL根据多个表更新列
- 30. 根据选择更新MySQL表
当请求事件时更新它。 – 2010-09-28 13:48:01
日期是唯一的标准?那你为什么要更新任何东西?使用一些日期算术代替例如比较日期值与现在()。 – VolkerK 2010-09-28 15:27:23
这是一个很好的观点,但应用程序严重依赖于事件状态,因此不断比较日期不是一种选择。如果状态仅被请求了几次,这将是有意义的。根据要求更新是一个选项。我感谢你们俩。 – JoaoPedro 2010-09-28 15:52:38