【问题标题】:PHP & SQL - compare unix timestamp with MySQL CURDATE()PHP & SQL - 比较 unix 时间戳和 MySQL CURDATE()
【发布时间】:2013-09-27 17:11:51
【问题描述】:

我正在尝试做以下事情: 在我的数据库中,我在每个行中都有时间行(使用 time() 函数)。 例如:1380300397。 现在,我想构建一个查询来获取当天的行。 我试过这个查询没有成功:

SELECT `id`,DATE_FORMAT(`time`, '%Y-%m-%d') FROM `facts` 
WHERE `app` = 1 AND DATE(`time`) = CURDATE()

我做错了什么? 谢谢!

【问题讨论】:

  • 为什么要在数据库中存储 unix 时间戳? MySQL 有一个 DATETIME 数据类型,专门用于存储日期和时间。
  • 下一个项目我会这样做。但是在这个项目中,我需要找到一个解决方案。

标签: php mysql sql time


【解决方案1】:
AND DATE(FROM_UNIXTIME(time)) = CURDATE()

【讨论】:

    【解决方案2】:

    你可以试试用NOW()代替CURDATE

    【讨论】:

    • 任何描述为什么要使用NOW()
    • 为什么是现在()?我只需要日期。
    【解决方案3】:

    在我看来,这是最好的方法。我知道乍一看这似乎是一种开销,但这样您就不会将任何函数应用于您的列,因此您的查询可以使用索引,如果您的 time 列上有一个。

    SELECT 
        `id`, DATE_FORMAT(`time`, '%Y-%m-%d')
    FROM
        `facts`
    WHERE
        `app` = 1
            AND `time` >= UNIX_TIMESTAMP(CONCAT(CURDATE(), ' 00:00:00'))
            AND `time` < UNIX_TIMESTAMP(CONCAT(DATE_ADD(CURDATE(), INTERVAL 1 DAY),
                        ' 00:00:00'))
    

    【讨论】:

      猜你喜欢
      • 2013-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多