我对这一次感到非常难过,几个小时都在努力,但没有成功,希望有人可以提供帮助。尝试构建一个每天运行的cron脚本,返回比当前日期早7天的行。
问题是,我的查询没有返回任何内容。没有错误消息,没有(我知道过去7天数据库中有条目 - 我们每天大约有7000个条目,所以它们就在那里!)我已经尝试了SELECT *并在编辑日期回应成功,除了我的SQL脚本之外,一切正常。
我引用的列(edit_date)是用Y-m-d h-m-s格式化的'datetime'类型。此列始终在创建和编辑时分配了日期时间值。
function get_ad_sql($table){
$sql = "SELECT
*
FROM
".$table."
WHERE
edit_date = DATE_SUB(NOW(), INTERVAL 7 DAY)
";
return $sql;
}
调用函数并'尝试'回显primary_key:
$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'),我可以在这里和网上找到,但无法得到任何工作。希望有人可以帮助我!
答案 0 :(得分:32)
获取相同的日期时间条目非常罕见,日期和时间最多可达秒。因此,为了获得适当的结果,我们需要忽略时间部分,并使用CURDATE()
函数来处理日期部分。
您可以忽略时间部分,并使用以下日期与日期进行比较:
function get_ad_sql($table){
$sql = "SELECT
*
FROM
".$table."
WHERE
DATE(edit_date) = DATE_SUB(CURDATE(), INTERVAL 7 DAY)
";
return $sql;
}
答案 1 :(得分:4)
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);
答案 2 :(得分:3)
你的剧本正在运作......我非常怀疑你在7天前(到第二天)有完全的东西。
也许你想要一些WHERE edit_date>DATE_SUB(NOW, INTERVAL 7 DAY) AND edit_date<DATE_SUB(NOW, INTERVAL 6 DAY)
?
或者,如果您只想比较日期(而不是时间)部分,请比较DATE()
的输出。
答案 3 :(得分:2)
SELECT SUBDATE(CURDATE(), 7)
试试这个。