【问题标题】:pulling records from mysql where the difference between 2 dates is greater than 8 days从 mysql 中提取两个日期之间的差异大于 8 天的记录
【发布时间】:2015-05-23 06:08:38
【问题描述】:

据我了解,According to this documentation 使用 INTERVAL 8 DAY 将返回任何超过 8 天的记录。

在我的声明中$moztimestampnow 是这种格式的当前日期2015-05-21moztimestamp 属于数据库中包含我需要计算的另一个较早日期的列。

我不确定是否可以在此语句中使用moztimestamp 作为列名,但它不起作用。

我如何获得天数的差异?

$moztimestampnow = date('Y-m-d');
SELECT *,DATEDIFF('$moztimestampnow',moztimestamp) INTERVAL 8 DAYS FROM backlinks WHERE user_id = '$user_id' LIMIT 10

【问题讨论】:

  • 即使假设可以,为什么还要使用带间隔的 datediff ???

标签: mysql


【解决方案1】:

首先,您误解了文档。 interval 关键字用于向日期添加值。如果要过滤数据,需要使用where子句。

在您的情况下,最好的 where 子句如下所示:

SELECT bl.*, DATEDIFF('$moztimestampnow', moztimestamp)
FROM backlinks bl
WHERE user_id = '$user_id' and
      moztimestamp <= DATE_SUB(CURDATE(), INTERVAL 8 DAY)
LIMIT 10

这可以利用backlinks(user_id, moztimestamp) 上的索引。此外,您可能应该有一个ORDER BY 子句。这是使用 LIMIT 时的预期结果。

【讨论】:

  • 你很亲密,我稍微编辑了你的解决方案,谢谢。
【解决方案2】:

您的语法没有意义。尝试类似:

SELECT *
FROM backlinks
WHERE DATE_SUB(moztimestamp, INTERVAL 8 DAY) > '$moztimestampnow' 
AND user_id = '$user_id'
LIMIT 10

我没有遵循您的目标,因此您可能需要更改第一个WHERE 子句中的顺序和方向。

【讨论】:

  • 用引号将变量括起来。 2015-05-21 = 1989
  • 谢谢——修复了。
猜你喜欢
  • 1970-01-01
  • 2011-06-13
  • 2019-05-11
  • 2011-01-30
  • 2017-10-24
  • 1970-01-01
  • 2021-07-03
  • 2011-03-20
相关资源
最近更新 更多