【问题标题】:PHP select data from previous 24 hours sql databasePHP从前24小时sql数据库中选择数据
【发布时间】:2014-09-04 00:36:29
【问题描述】:

我使用下面的脚本从前 24 小时中提取数据并将其吐出到一个 html 表中,它在整个 8 月都有效,但由于月份更改为 9 月而变得一团糟,现在开始显示所有数据进入..

我的“时间戳”列是 varchar + 主键,格式如下:04/09/2014 01:33:59

这是脚本:

$sql = "SELECT * 
        FROM my_table
        WHERE Timestamp >= DATE_FORMAT(CURDATE(), '%d/%m/%Y') 
        ORDER BY Timestamp ";

这个脚本有什么问题?我只想让它提取过去 24 小时内的所有数据,仅此而已,在此先感谢!

【问题讨论】:

  • 您为什么不对 Timestamp 列使用 DATETIME 数据类型?这种格式的日期不容易比较。
  • 如果要将其存储为 VARCHAR,则应使用 YYYY-MM-DD,而不是 DD/MM/YYYY
  • 在黑暗中拍摄,但 WHERE Timestamp LIKE DATE_FORMAT(CURDATE(), '%d/%m/%Y') 会起作用吗?而不是在得到所有匹配后得到任何东西。我什至不确定这是有效的 sql
  • Barmar,因为我需要它以 DD/MM/YYYY 的格式显示,所以它是爱尔兰的标准格式......我们发现它更容易阅读并且看起来更整洁 :)
  • 向用户显示时应该使用格式化函数,它不应该影响你在数据库中的存储方式。

标签: php html mysql sql datetime


【解决方案1】:

您应该将Timestamp 转换为DATE,而不是将CURDATE() 转换为字符串。您可以为此使用STR_TO_DATE

WHERE STR_TO_DATE(Timestamp, '%d/%m/%Y %H:%i:%s') >= CURDATE()
ORDER BY STR_TO_DATE(Timestamp, '%d/%m/%Y %H:%i:%s')

您也可以使用原始查询,但只需使用 = 而不是 >=。您只需要当前日期的行,而不是未来的行。

【讨论】:

    【解决方案2】:

    如果在 PHP 中,我使用 diff

    $sql = "SELECT timestamp from yourtable";
    $now = new DateTime();
    if($r = mysql_query($sql))
    {
       while($row = mysql_fetch_array($r))
       {
          $dt = date("Y-m-d H:i:s",strtotime($row['timestamp']));
          $dates = new DateTime($dt);
          $datedif = $now->diff($dates)->format("%d");
          if($datedif >= 1)
          {
               Your events
          }
       }
    }
    

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 2023-04-01
      • 2019-02-21
      • 1970-01-01
      • 2015-05-31
      • 1970-01-01
      • 1970-01-01
      • 2016-09-11
      • 2012-10-08
      • 2012-07-22
      相关资源
      最近更新 更多