【发布时间】:2013-12-16 15:52:42
【问题描述】:
我有一个过程,它在 SQL 表中创建带有日期和时间的行。
我需要该行的有效期只有半小时,所以,如果进程在04:00创建一行,我需要该行在04:30自动删除。
如何在 SQL 或 PHP 代码中执行此操作?
【问题讨论】:
标签: php sql database symfony time
我有一个过程,它在 SQL 表中创建带有日期和时间的行。
我需要该行的有效期只有半小时,所以,如果进程在04:00创建一行,我需要该行在04:30自动删除。
如何在 SQL 或 PHP 代码中执行此操作?
【问题讨论】:
标签: php sql database symfony time
一般来说,如果您有此类时间相关数据,则需要保存日期(原因)。如果您只想隐藏某些作业或类似的旧行,只需创建一个数据库视图,该视图根据 where 条件隐藏行。 (如果您可能需要证明自己做过某事,这也很有帮助。)
如果您不关心,只需添加该日期时间/时间戳字段并创建一个 cronjob,它使用上述查询的逆逻辑为您删除数据。
如果您在自行实施时遇到问题,请将您的数据库架构添加到您的问题中并发表评论。
【讨论】:
在您的表中添加一列date_added timestamp。插入行时会自动设置此值。
然后编写一个 PHP 脚本来执行这个查询DELETE FROM [mytable] WHERE UNIX_TIMESTAMP(now()) - UNIX_TIMESTAMP(date_added) > 1800。安排一个 cron 作业每隔一分钟左右运行一次。
【讨论】:
您可以轻松地在库存程序http://dev.mysql.com/doc/refman/5.0/fr/create-procedure.html 中进行此操作,或者如果您想在 php (symfony2) 中进行操作,您可以创建一个 croned 命令,每 x 分钟(或秒)启动一次以验证每个进程。
【讨论】:
我将创建一个 PHP 文件,该文件在创建日期/时间大于半小时前的任何记录上运行删除语句。
然后你可以在 cron 上运行它,但你认为有必要的频率。
例如,如果可以随时创建条目,我会每隔一两分钟运行一次 PHP 脚本。
如果只能每隔半小时创建条目(例如 5.00、5.30),那么在 XX:01 和 XX:31 运行脚本可能就足够了。
运行脚本的时间取决于可能输入数据库条目的时间,以及在创建后尽可能接近半小时删除行所需的准确性。
【讨论】:
我会在数据库本身上创建一个计划作业,以清理超过 30 分钟的记录。
【讨论】:
如果你有一个从这个表中读取的进程,那么使用一个基于这个时间来限制周期的子句。
您可以运行一个额外的进程,将该行标记为禁用,以备不时之需,我个人不会删除此类数据,因为您会丢失事件日志。
【讨论】:
使用定时任务
来自(控制台)SSH:crontab -e
添加行:
0,30 * * * * php /path/to/script.php
在 script.php 中编写代码以查看 >= 30 分钟的行并删除它们。
【讨论】:
不需要php在这个任务中,你可以创建一个RECURRING类型的新mysql数据库事件,没有结束日期,你只需把
DELETE FROM `table` WHERE `expiryTime`-UNIX_TIMESTAMP() < 1
比较表达式可能会因日期保存方法的不同而有所不同。在这种情况下,expiryTime 字段将保存为 unix timestamp 到到期时间。
【讨论】: