首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何更新只依赖于时间戳的mysql db列?

如何更新只依赖于时间戳的mysql db列?
EN

Stack Overflow用户
提问于 2017-06-11 21:04:16
回答 3查看 66关注 0票数 0

假设我有一个包含列taken (boolean)的表tbl_Room,一个客户想要短期租用这个房间。

现在,我是否可以告诉mysql根据时间戳自动更改taken的值,例如,如果租用时间/周期已过,taken的值应该自动设置为false。

或者,我是否需要使用CRON或其他定期在服务器上运行的脚本来更新我的数据库?

EN

回答 3

Stack Overflow用户

发布于 2017-06-11 21:12:22

请使用mysql事件进行管理。

代码语言:javascript
运行
复制
CREATE EVENT [IF NOT EXIST]  event_name
ON SCHEDULE schedule
DO
event_body

Reference

event_body下,您可以编写select语句来检查周期,然后在周期结束时更新表。

票数 1
EN

Stack Overflow用户

发布于 2017-06-11 21:21:49

处理这种基于时间的请求的最佳方法是违反直觉的。

不要试图在特定时间更新表。相反,应该包含一个名为lease_expires_at之类的时间戳列。

当您租用房间时,更新行,将lease_expires_at的值设置为租期到期的时间。例如,如果你租了一个房间30分钟,从现在开始,这样做。

代码语言:javascript
运行
复制
  UPDATE room
     SET lease_expires_at = NOW() + INTERVAL 30 MINUTE
   WHERE room_number = whatever

如果您想知道某个房间目前是否(NOW())已被占用,请执行以下操作:

代码语言:javascript
运行
复制
 SELECT room_number,
        CASE WHEN lease_expires_at IS NULL THEN 0
             WHEN lease_expires_at <= NOW() THEN 0
             ELSE 1 END taken
   FROM room
  WHERE room = whatever

如果您想知道一个小时后是否有房间可用(NOW() + INTERVAL 60 MINUTE),请执行以下操作:

代码语言:javascript
运行
复制
 SELECT room_number,
        CASE WHEN lease_expires_at IS NULL THEN 0
             WHEN lease_expires_at <= NOW() + INTERVAL 60 MINUTE THEN 0
             ELSE 1 END taken
   FROM room
  WHERE room = whatever

然后,偶尔,但不是以任何时间要求严格的方式,您可以使用下面这样的查询进行清理

代码语言:javascript
运行
复制
  UPDATE room SET lease_expires = NULL WHERE lease_expires <= NOW()

您可以使用事件、通宵cronjob或您希望的任何方式来执行此清理。应用程序的完整性并不依赖于该作业的确切运行时间。

这样做的好处应该是显而易见的:如果您依赖一些定期运行的进程来设置taken列值,而该进程没有运行或运行得很晚,那么您会得到糟糕的结果。当你依靠时间时,你会得到准确的结果。

在这个设计中有一个很小的边界条件细节。通过在查询中使用<=,我选择让lease_expires_at时间戳表示房间可用于另一个租约的第一个时刻,而不是当前租约的最后时刻。这是一个很方便的选择,因为如果您将像2017-11-2017 11:00:00这样的内容放到lease_expires_at中,而有人问“11:00的房间有空吗?”你希望能够很容易地说“是”。10点半租车的人会一直租到11点前。

票数 1
EN

Stack Overflow用户

发布于 2017-06-11 21:11:15

你可以使用jquery time picker....after,你可以创建一个if循环,在这个if循环中,JavaScript时间函数会检查当前的time...to,它的原始time...if条件是satisfied...we,可以改变mysql的taken函数。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44484169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档