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