【发布时间】:2012-06-17 19:34:10
【问题描述】:
我正在尝试创建一个计算机预订系统,用户可以在其中选择一台计算机并选择他将使用这台 PC 的时间。在那个时候其他人无法保留这台电脑,我需要找到一个解决方案,如何在他们的时间到期后自动删除所有包含保留电脑的行。谢谢你的建议。
【问题讨论】:
我正在尝试创建一个计算机预订系统,用户可以在其中选择一台计算机并选择他将使用这台 PC 的时间。在那个时候其他人无法保留这台电脑,我需要找到一个解决方案,如何在他们的时间到期后自动删除所有包含保留电脑的行。谢谢你的建议。
【问题讨论】:
处理此问题的常用方法是在reservation 行上存储expires_at 时间戳。那么您查找任何“开放”预订的查询将包含WHERE 'expires_at' < NOW() 或类似的内容。
【讨论】:
这是一个未经测试的答案,可能只是一个建议,但我刚开始研究这些,所以也对反馈感兴趣。我仍在研究可能性和缺点,但它可能很适合您的需要。
看一下MySQL Events,一篇关于它的文章是here,官方语法在Mysql Docs。
根据文章:
事件类似于触发器。然而,与其跑进去 响应数据更改,可以安排事件运行任意数量 特定时期内的次数。实际上,它只是一个数据库 定时任务。
考虑到这一点,我设想了一个删除任何 >1 小时(如果那是到期)的过程。此过程将在新插入时触发以删除当时过期的任何内容,但也在每 15 分钟左右运行一次的事件中,以便触发器的自动删除不依赖于某人否则添加保留以触发该过程。
【讨论】:
delete from ... where ... 的过程的事件应该工作得很好。只需将活动安排得足够频繁。另一方面,如果您像其他一些答案一样使用开始和结束时间,您将保留所有预订的记录。看你需要什么。
如果您的服务器是 linux,您可以使用 cron 作业 在每个预订日期每天检查一次。如果这些日期已过……修改后的油田储备可用。
【讨论】:
通常我会这样做:
date_from 和date_to 两种数据类型DATETIME
WHERE '{$my_date}' >= date_to AND '{$my_date}' <= date_from 进行过滤时-通过此您应该能够获得在一定时间内未保留的所有PC...【讨论】:
DATETIME,因为我们不按小时出售房间。
要完成解决方案,您需要运行一个 CRON 作业,该作业调用一个查询以删除所有具有 reservation_time + (15 * 60)
我假设您有时间进行预订或开始预订,并且正在使用 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
【讨论】: