3

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

4

5 回答 5

5

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

于 2012-06-14T18:00:47.700 回答
4

如果您的服务器是 linux,您可以使用cron 作业在每个预订日期每天检查一次。如果这些日期已过期.. 修改后的油田储备可用。

于 2012-06-14T18:00:45.683 回答
4

这是一个未经测试的答案,可能只是一个建议,但我刚开始研究这些,所以也对反馈感兴趣。我仍在研究可能性和缺点,但它可能很适合您的需要。

看看 MySQL Events,一篇关于它的文章在这里,官方语法在Mysql Docs
根据文章:

事件类似于触发器。但是,事件不是响应数据更改而运行,而是可以安排在特定时间段内运行任意次数。实际上,这是一个仅限数据库的 cron 作业。

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

于 2012-06-14T18:30:48.033 回答
3

通常我会这样做:

  • 存储预订时,存储数据类型date_fromdate_to两者DATETIME
  • 当检查是否有计算机免费检查所有计算机并过滤时WHERE '{$my_date}' >= date_to AND '{$my_date}' <= date_from- 通过这个您应该能够获得在特定时间内未保留的所有 PC...
于 2012-06-14T18:07:33.817 回答
1

要在解决方案中完成,您需要运行一个 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
于 2012-06-14T18:15:00.600 回答