-1

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

id - int
name - int
the_date - int

the_date是添加行时的 unix 时间戳

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

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

任何帮助将不胜感激。

4

3 回答 3

0
$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 天。希望这可以帮助

于 2012-05-11T00:39:40.833 回答
0
SELECT * FROM `dbname1`.`test`
  WHERE 
    date(FROM_UNIXTIME(`the_date`)) = ADDDATE(DATE(NOW()), INTERVAL 7 DAY);
于 2012-05-11T00:43:02.597 回答
0

这里的兴趣点,

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

where the_date >= unix_timestamp(curdate() + interval 7 day)
  and the_date < unix_timestamp(curdate() + interval 8 day)
于 2012-05-11T00:50:54.323 回答