【问题标题】:MySQL Query that only runs within 72 hours仅在 72 小时内运行的 MySQL 查询
【发布时间】:2014-08-08 15:55:35
【问题描述】:

我目前有一个脚本,可以运行来自游戏的新闻,并显示统计数据等。其中一个查询只是计算数据库中的项目数并显示它。它正在计数的数据库有一个名为“timestamp”的列,它采用 unix 时间戳格式(秒数)。

我希望查询仅将数据库中在查询运行前 72 小时内发生的实例数相加。 (所以如果我在 2014 年 8 月 8 日上午 10 点运行它,我希望它向后计数 72 小时的记录,一直到 2014 年 8 月 5 日上午 10 点)。

我已尝试编写查询来完成此操作,但我对如何编写查询了解不足,无法弄清楚我应该如何安排它。到目前为止,这是我所拥有的,它计算整个数据库中的所有记录,无论时间如何:

$result2 = mysql_query("SELECT COUNT(xxxxx) FROM xxx WHERE xxxxx= '$row[3]'")
           or die("Could not select the table");

如何修改上述查询以过滤掉过去 72 小时内不存在的任何内容。请记住,我的数据库确实有一个名为“timestamp”的列,它采用 unix 时间戳格式。感谢您的帮助,这让我很困惑!

【问题讨论】:

    标签: php mysql sql


    【解决方案1】:
    WHERE yourtimefield > (now() - INTERVAL 72 HOUR)
    

    【讨论】:

      【解决方案2】:

      如果时间戳字段是正确的时间列而不是整数,您可以使用 MySQL 为您执行此操作。 72小时是3天。 datediff 函数返回两个日期/时间字段之间的天数。

      select * from xxx where datediff(now(),timestamp)<=3;
      

      【讨论】:

      • 您应该警惕在函数中包装一个漂亮的可索引时间戳。这会使任何索引无效。另外,来自DATEDIFF 文档;计算中仅使用值的日期部分。所以这不太正确。
      • 我从中收集数据的提要包含它作为提要的一部分,因此我将其作为 INT 保存在我的数据库中。如果我将该列切换为时间戳,mysql会将其识别为时间戳并工作吗?或者,如果我已将时间戳保存为 INT,是否有办法编写查询来完成此操作?
      • @Ryansworld84 将列切换到timestamp,它会起作用.. 如果您不相信,可以先创建一个备份列;也使用 Marc B 的答案。
      • 好的,我试试。最后一个问题:我从中收集信息的提要包括游戏中事件发生的时间戳。如果我将该列更改为时间戳,它将保留提要提供的时间(采用 unix 格式)还是将其覆盖为我将其插入数据库的时间?
      【解决方案3】:

      你可以通过strtotime函数获取时间戳

      你的代码会是这样的

      $time = strtotime ("-3 DAY");
      $result2 = mysql_query("SELECT COUNT(xxxxx) FROM xxx WHERE xxxxx= '$row[3]' AND timestamp > $time")
                 or die("Could not select the table");
      

      【讨论】:

      • 我认为这会很好用!我的“时间戳”列未存储在 mysql 中的“时间戳”类型中,它存储为 INT,因为它是从游戏服务器提供给我的。如果该列是 INT 但存储 unix 格式时间,它仍然有效吗?还是我需要将该列切换为 mysql 服务器上的时间戳类型?
      • 这将适用于 mysql 中的 int 类型列。您无需更改列类型。
      猜你喜欢
      • 1970-01-01
      • 2020-07-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-01
      • 1970-01-01
      • 2012-01-17
      • 1970-01-01
      • 2021-07-11
      相关资源
      最近更新 更多