【问题标题】:Displaying only data from a mysql database that is from todays date仅显示来自今天日期的 mysql 数据库中的数据
【发布时间】:2013-01-06 22:40:46
【问题描述】:

我想使用 PHP 过滤我的结果以仅显示今天插入的表中的数据。格式如下:

表格daily中的列date,格式为2013-01-06 17:36:11。如何使用 PHP 过滤查询以仅显示今天的查询?

【问题讨论】:

    标签: php mysql


    【解决方案1】:
    WHERE DATE(`date`) = DATE(NOW())
    

    【讨论】:

    • 不敢相信考虑到我用 NOW() 插入它这么容易哈哈。
    • 几个问题。为什么它适用于` 而不是' 对于(`date`)。另外,为什么您的查询有效但WHERE date = NOW() 无效?
    • @eveo:嗯,` 表示一个表/列名,其中 ' 表示一个字符串。此外,NOW() 包括时间,这可能与 date 中的任何内容都不匹配 :)
    • 谢谢!我使用生成2013-01-06 17:36:11NOW() 在我的数据库中插入了一个日期时间,那么为什么NOW() 前面的DATE 是必要的?
    • @eveo:MySQL 中的 DATE 函数将只返回给定 DATETIME 之外的 DATE,所以DATE(2013-01-06 17:36:11) == 2013-01-06DATE(NOW()) 也是如此
    【解决方案2】:

    最好在 sql 查询的 where 子句中进行操作。扩展宇智波斑的回答:如果您使用的是 MySQL,您的查询将类似于:

    SELECT * FROM daily WHERE DATE(`date`) = DATE(NOW()).
    

    如果您出于某种奇怪的原因必须在 PHP 中执行此操作(我不推荐),则必须循环查询结果并比较PHP 中每个数据库行的日期字段与今天的日期。

    //setup the array our filtered results will go in
    $filteredResults = array();
    
    //get the timestamp for 12:00:00am and 11:59:59pm today 
    $greaterThanThisTime = mktime(0,0,0,date('n'),date('j'),date('Y'));
    $lessThanThisTime = mktime(23,59,59,date('n'),date('j'),date('Y'));
    
    //loop the database results
    foreach($dbResults as $i=>$row) {
      $rowTimeStamp = strtotime($row['date']);
      if($rowTimeStamp>=$greaterThanThisTime && $rowTimeStamp<=$lessThanThisTime) {
        $filteredResults[] = $row;
      }
    }
    
    //continue to do whatever you need, using $filteredResults as your results
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-30
      • 2020-09-26
      • 2014-05-04
      • 1970-01-01
      • 2017-06-22
      • 2013-08-19
      • 2018-12-07
      相关资源
      最近更新 更多