【问题标题】:selecting all rows 7 days from now based on unix timestamp and current date根据 unix 时间戳和当前日期选择 7 天后的所有行
【发布时间】:2012-05-11 00:23:44
【问题描述】:

我有一个包含以下字段的表格:

id - int
name - int
the_date - int

the_date 是添加行时的 unix 时间戳

现在我正在尝试编写一个查询,它将选择从现在起 7 天后的所有行。我不是在谈论从time() 中选择 >= 7 天的行,我需要使用time() 获取当前日期,然后运行一个 SELECT 来获取在 7 天这一天插入的所有行来自time()

我知道如何做到这一点,因此它在从 time() 开始的 7 天内使用简单的 >= SELECT,但我不知道如何做到这一点,因此它会选择所有 unix 时间戳在该特定日期的行( 7 天后)。

任何帮助将不胜感激。

【问题讨论】:

  • 您要选择从现在开始插入 7 天的记录吗?哇,我也想要这样的查询并预测未来!

标签: php mysql date time


【解决方案1】:

这里的兴趣点,

  • 我使用 curdate() 来获取当前 DATE,而不是 DATETIME。
  • 我添加 7 天并转换为 unix 时间,这会产生当天的开始秒数
  • 我第二天做同样的事情
  • 我将 where 子句构造为 >= 或等于目标日期,但
  • 我不使用列本身的任何功能。这很重要,因为如果我这样做了,mysql 将无法使用列上存在的任何索引来完成查询。

where the_date >= unix_timestamp(curdate() + interval 7 day)
  and the_date < unix_timestamp(curdate() + interval 8 day)

【讨论】:

    【解决方案2】:
    SELECT * FROM `dbname1`.`test`
      WHERE 
        date(FROM_UNIXTIME(`the_date`)) = ADDDATE(DATE(NOW()), INTERVAL 7 DAY);
    

    【讨论】:

    • 这会选择从现在起 7 天上午 12 点到下午 12 点的所有行吗?
    • date() 将采用日期/时间戳的日期部分,即 2012-05-10。这将涵盖一整天 00:00 到 23:59
    【解决方案3】:
    $todayParts = getdate();    
    $startToday = mktime(0, 0, 0, $todayParts['mon'], $todayParts['mday'], $todayParts['year']);
    $sevebDaysFromNow = 60 * 60 * 24 * 7;
    $seventhStart = $startToday + $sevebDaysFromNow;
    $seventhEnd = $seventhStart + 60 * 60 * 24;
    $sql = "SELECT * FROM <table> WHERE the_date BETWEEN $seventhStart AND $seventEnd";
    

    这将从您现在的一天开始计算 7 天。希望这会有所帮助

    【讨论】:

    • 我知道该怎么做...我需要在该日期添加的所有行,例如当天从上午 12 点到下午 12 点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-06
    • 2012-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-17
    相关资源
    最近更新 更多