Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL-在x秒不活动后自动更新行(设置过期时间)_Php_Mysql_Cron_Mysql Event - Fatal编程技术网

Php MySQL-在x秒不活动后自动更新行(设置过期时间)

Php MySQL-在x秒不活动后自动更新行(设置过期时间),php,mysql,cron,mysql-event,Php,Mysql,Cron,Mysql Event,对于一个艺术项目,我正试图建立一个订单网站。 该概念允许用户与每个艺术家最多预订两个时段。每个艺术家有12个插槽,但每个插槽都有特定的定义(因此每个插槽都是唯一的)。老虎机只能在非常有限的时间内使用,希望能尽快预订。所以在短时间内会有很多请求。我必须确保每篇文章/时段一次只提供给一个用户,不能重复预订 我的想法是,检查下一个未预订的插槽(status=“free”),并根据该请求将表中相应行的状态更新为status=“locked”。如果用户继续实际预订插槽,则状态将更新为“booked” 如果

对于一个艺术项目,我正试图建立一个订单网站。 该概念允许用户与每个艺术家最多预订两个时段。每个艺术家有12个插槽,但每个插槽都有特定的定义(因此每个插槽都是唯一的)。老虎机只能在非常有限的时间内使用,希望能尽快预订。所以在短时间内会有很多请求。我必须确保每篇文章/时段一次只提供给一个用户,不能重复预订

我的想法是,检查下一个未预订的插槽(status=“free”),并根据该请求将表中相应行的状态更新为status=“locked”。如果用户继续实际预订插槽,则状态将更新为“booked”

如果用户单击“取消”,我可以通过将行更新为status=“free”来发布文章

然而,用户不太可能放弃网站,我看不到检查的方法。插槽将保持“锁定”。我在想,可能有一种方法可以自动重置状态,例如,在is“锁定”120秒后,向用户显示倒计时。这甚至可以增强兴奋因素

我认为cron作业不起作用,因为我需要锚定是行的最后一次更新,而不是特定的日期时间

我查看了MySQL事件,但了解到我无法操作它所附加到的表的数据

如果有任何想法,我将不胜感激。 谢谢 萨姆

  • 在数据库的状态表中添加一个
    datetime
    字段

  • 当有人锁定
    插槽时,您还可以使用
    NOW()

  • 当有人查阅您执行的插槽时,更新并释放非活动插槽

    Update slots
    SET locked = false 
    WHERE `datetime`> NOW() - INTERVAL 15 MINUTE;
    
    SELECT *
    FROM slots
    WHERE locked = false;
    

  • 哇。太快了。我理解对了吗,“间隔15分钟”是一个我可以根据需要更改的设置?你能解释一下,你所说的“当有人查看插槽时”是什么意思吗"? 谢谢可能还需要根据特定id或其他内容进行筛选。是的,
    15分钟
    可以是
    1小时
    检查所有选项。我猜你应该去db检查可用的插槽以显示给用户?因此,在检查哪些插槽是空闲的之前,您需要更新表以解锁非活动的插槽。基本上,您所说的是在任何用户发送新请求时立即更新所有行的状态。这是有道理的。我没有想到这是一个“清理”触发器。很酷。我要试试这个!非常感谢:)