我正在尝试创建一个计算机预订系统,用户可以在其中选择一台计算机并选择他将使用这台 PC 的时间。在那个时候其他人无法保留这台电脑,我需要找到一个解决方案,如何在他们的时间到期后自动删除所有包含保留电脑的行。谢谢你的建议。
5 回答
处理此问题的常用方法是在行expires_at
上存储时间戳。reservation
然后,您查找任何“开放”预订的查询将具有WHERE 'expires_at' < NOW()
或类似的东西。
如果您的服务器是 linux,您可以使用cron 作业在每个预订日期每天检查一次。如果这些日期已过期.. 修改后的油田储备可用。
这是一个未经测试的答案,可能只是一个建议,但我刚开始研究这些,所以也对反馈感兴趣。我仍在研究可能性和缺点,但它可能很适合您的需要。
看看 MySQL Events,一篇关于它的文章在这里,官方语法在Mysql Docs。
根据文章:
事件类似于触发器。但是,事件不是响应数据更改而运行,而是可以安排在特定时间段内运行任意次数。实际上,这是一个仅限数据库的 cron 作业。
考虑到这一点,我设想了一个删除任何 >1 小时的程序(如果那是到期)。此过程将在新插入时触发以删除当时过期的任何内容,但也会在每 15 分钟左右运行一次的事件中触发,以便触发器的自动删除不依赖于其他人添加保留以触发该事件程序。
通常我会这样做:
- 存储预订时,存储数据类型
date_from
和date_to
两者DATETIME
- 当检查是否有计算机免费检查所有计算机并过滤时
WHERE '{$my_date}' >= date_to AND '{$my_date}' <= date_from
- 通过这个您应该能够获得在特定时间内未保留的所有 PC...
要在解决方案中完成,您需要运行一个 CRON 作业,该作业调用一个查询以删除所有具有 reservation_time + (15 * 60) < 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