MySQL从7天前精确选择行

时间:2011-10-13 15:39:02

标签: php mysql intervals

我对这一次感到非常难过,几个小时都在努力,但没有成功,希望有人可以提供帮助。尝试构建一个每天运行的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'),我可以在这里和网上找到,但无法得到任何工作。希望有人可以帮助我!

4 个答案:

答案 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)

试试这个。