MySQL 从 7 天前选择行
Posted
技术标签:
【中文标题】MySQL 从 7 天前选择行【英文标题】:MySQL select rows from exactly 7 days ago 【发布时间】:2011-12-07 02:06:59 【问题描述】:我完全被这个难住了,尝试了几个小时但没有成功,希望有人能提供帮助。尝试构建一个每天运行的 cron 脚本,它返回比当前日期正好早 7 天的行。
问题是,我的查询没有返回任何内容。没有错误消息,什么都没有(我知道过去 7 天数据库中有条目 - 我们每天大约有 7000 个新条目,所以它们就在那里!)我尝试了 SELECT * 并成功回显编辑日期,所以一切正常,除了我的 SQL 脚本。
我引用的列 (edit_date) 是“日期时间”类型,格式为 Y-m-d h-m-s。此列始终具有在创建和编辑时分配的日期时间值。
function get_ad_sql($table)
$sql = "SELECT
*
FROM
".$table."
WHERE
edit_date = DATE_SUB(NOW(), INTERVAL 7 DAY)
";
return $sql;
并调用函数并“尝试”回显主键:
$sqlAng = get_ad_sql('angebote');
$result = mysql_query($sqlAng);
while($row = mysql_fetch_array($result))
echo $row['primary_key'];
我已经尝试了 DATE_SUB(NOW(), INTERVAL 7 DAY) 的所有变体,包括 CURDATE(), DATE_FORMAT(edit_date, '%m/%d/%Y'),我可以在这里和在线找到,但无法得到任何工作。希望有人可以帮助我!
【问题讨论】:
SELECT DATE_FORMAT(edit_date),DATE_SUB(DATE_FORMAT(NOW()), INTERVAL 7 DAY)
给你什么?它们看起来一样吗?
感谢大家在几分钟内的帮助,非常感谢。我已经尝试过投票,但在我获得 15 个代表点之前,我似乎无法投票。再次感谢大家!
【参考方案1】:
很少有相同的日期时间条目将日期和时间设置为秒。因此,为了得到合适的结果,我们需要忽略时间部分,处理日期部分,因此,使用CURDATE()
函数。
您可以忽略时间部分并使用以下方法与日期进行比较:
function get_ad_sql($table)
$sql = "SELECT
*
FROM
".$table."
WHERE
DATE(edit_date) = DATE_SUB(CURDATE(), INTERVAL 7 DAY)
";
return $sql;
【讨论】:
请注意:我更新了比较运算符右侧的查询以提高性能。 注意到并没有问题地实施(但我在末尾添加了 DAY...这是 INTERVAL 的默认值吗? 加Day就好了,你可以看看这些函数了解更多详情:dev.mysql.com/doc/refman/5.5/en/… 除非我将“INTERVAL 7”更改为“INTERVAL 7 DAY”,否则不会为我运行 建议改进:左侧的 DATE(edit_date) 意味着必须对每个选中的行进行类型转换(您可以在执行 EXPLAIN EXTENDED ... 之后看到这一点,然后在 SHOW WARNINGS 之后)。更好的选择是 WHERE edit_date >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) AND edit_date 【参考方案2】:NOW() 返回 DATETIME 值,您应该使用 DATE 函数来获取没有时间的日期,例如-
SELECT * FROM table WHERE edit_date = DATE_SUB(DATE(NOW()), INTERVAL 7 DAY);
如果edit_date
字段的类型是DATETIME,那么这个字段也应该被DATE()函数包裹-
SELECT * FROM table WHERE DATE(edit_date) = DATE_SUB(DATE(NOW()), INTERVAL 7 DAY);
【讨论】:
【参考方案3】: SELECT SUBDATE(CURDATE(), 7)
试试这个。
【讨论】:
【参考方案4】:您的脚本正在运行...我非常怀疑您在 7 天前(到第二天)确切有什么东西。
也许你想要什么WHERE edit_date>DATE_SUB(NOW, INTERVAL 7 DAY) AND edit_date<DATE_SUB(NOW, INTERVAL 6 DAY)
?
或者,如果您只想比较日期(而不是时间)部分,请改为比较 DATE()
的输出。
【讨论】:
是的,我试图比较日期,而不是第二个。非常感谢你们的帮助!以上是关于MySQL 从 7 天前选择行的主要内容,如果未能解决你的问题,请参考以下文章