指定时间后删除Mysql行

时间:2012-06-14 17:55:49

标签: php mysql

我正在尝试创建一个计算机预订系统,用户选择一台计算机并选择他将使用该PC的时间。在那个时候其他人不能保留这台电脑,我需要找到一个解决方案,如何在时间到期后自动删除包含保留pc的所有行。谢谢你的建议。

5 个答案:

答案 0 :(得分:5)

处理此问题的常用方法是在expires_at行上存储reservation时间戳。然后,查询任何“开放”预订的查询都会有WHERE 'expires_at' < NOW()或类似内容。

答案 1 :(得分:4)

如果您的服务器是Linux,则可以使用 cron jobs 每天预订一次。如果这些日期已过期,则修改后的字段储备可用。

答案 2 :(得分:4)

这是一个未经测试的答案,可能只是一个建议,但我刚开始看这些,所以我也对反馈感兴趣。我仍在努力解决可能性和缺点,但它可能非常适合您的需求。

看一下MySQL Events,一篇关于它的文章here,以及Mysql Docs的官方语法。
根据文章:

  

事件类似于触发器。但是,而不是跑进来   响应数据更改,可以安排事件运行任何数字   在特定时期内的时间。实际上,它只是一个数据库   cron job。

考虑到这一点,我设想一个删除任何&gt; 1小时(如果那是到期)的程序。此过程将在新插入时触发以消除当时已过期的任何内容,但在事件中每15分钟左右运行一次,以便触发器的自动删除不依赖于某人否则添加预留来触发该程序。

答案 3 :(得分:3)

通常我会这样做:

  • 存储预订时,存储date_fromdate_to两种数据类型DATETIME
  • 检查是否有计算机免费检查所有计算机并使用WHERE '{$my_date}' >= date_to AND '{$my_date}' <= date_from进行过滤 - 这样您就可以获得所有未在一定时间内保留的PC ...

答案 4 :(得分:1)

要在解决方案中完成,您需要运行一个CRON作业,该作业调用查询以删除所有具有reservation_time +(15 * 60)&lt; UNIX_TIMESTAMP()。

我假设您有时间预订或启动预订并使用UNIX / Epoch时间戳。

如果您知道它将始终是一个固定的间隔,即15分钟,而不是做expires_now,您可以这样做:

DELETE FROM reservations WHERE  reservation_time + (15 * 60) < unix_timestamp() 

你可以看到的是从PHP管理cron作业http://www.highonphp.com/cron-job-manager

上面的脚本将在创建预留时在/etc/cron.d/中插入一个条目,您可以将其配置为在预期的预留结束时间运行。然后在将要执行的php文件中,你可以这样做:

DELETE FROM reservations WHERE id = :id