【问题标题】:Update record status based on Time根据时间更新记录状态
【发布时间】:2011-01-15 18:28:14
【问题描述】:

我正在寻找一些指导。基本上,我正在为 Jobs 数据库开发一个系统。用户可以申请网站上公布的职位。

当有人提交新工作时,他们需要指定申请的截​​止日期/时间。这通常是日期和时间,例如:16:00 on 20/01/2011

我的问题是,如何确定一个工作是仍然开放还是关闭。我可以想到两种方法:

  1. 表中有一个状态字段,状态 1=打开,状态 0=关闭。现在的问题是,一旦达到关闭时间,状态将需要自动设置为 0。

  2. 使用PHP检查关闭时间是否大于当前时间,如果大于则表示关闭,用户无法申请。

此外,工作的所有者将能够重新打开已关闭的工作,或在关闭日期之前手动关闭工作。

最好的方法是什么?

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    使用选项 3:仅查询未过期的作业;您可以通过将NOW() 与存储的日期时间进行比较来测试作业是否已过期,如果NOW() < expire_time 则作业已打开。

    【讨论】:

    • 我怀疑你仍然需要一个状态标志,以防由于其他原因需要关闭作业。
    【解决方案2】:

    我会使用这两种方法。状态字段可用于激活作业,或在将来停用。也许它可以呈现多个状态,例如“草稿”、“活动”、“关闭”。

    时间功能很不错,因为您可以使用它来自动关闭您的 PHP 进程的作业。

    只需确保所有时间都在同一时区进行比较,以便在确定应关闭哪些工作时保持简单。

    【讨论】:

    • 您还可以区分已关闭的职位和列出时间已过期的职位(即:状态仍然开放但已过期)
    • 是的。跟踪状态和过期时间可能会使查询复杂一些。我想查询可以简化为只检查作业的“状态”,如果有一个服务器端进程正在运行,它会自动将过期的作业标记为关闭。
    【解决方案3】:

    您认为“一旦达到关闭时间,状态将需要自动设置为 0”的假设不正确。

    您需要做的只是在数据库中查询在开始和结束日期/时间内的实时作业。例如:

    SELECT <fields> FROM <job table> WHERE
                job_startdate <= NOW() 
                AND job_enddate >= NOW()
                AND job_status=1 
                ...
    

    这将确保仅显示开始日期和结束日期内的未完成工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-30
      • 2021-09-08
      • 2021-12-09
      • 2018-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多