MySQL 选择 7 天前的行

2022-08-30 16:25:01

我完全陷入了困境,尝试了几个小时但没有成功,希望有人能帮忙。尝试构建一个 cron 脚本以每天运行,该脚本返回比当前日期早 7 天的行。

问题是,我的查询没有返回任何内容。没有错误混乱,什么都没有(我知道数据库中有过去7天的条目 - 我们每天收到大约7000个新条目,所以它们就在那里!我已经尝试了SELECT *并成功回显了编辑日期,因此除了我的SQL脚本之外,一切都可以正常工作。

我引用的列(edit_date)是类型“datetime”,格式为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;
}

调用函数并“尝试”以回显primary_key:

$sqlAng = get_ad_sql('angebote');
$result = mysql_query($sqlAng);
while($row = mysql_fetch_array($result)){
    echo $row['primary_key'];
}

我已经尝试了DATE_SUB(NOW(),间隔7 DAY)的所有变体,包括CURDATE(),DATE_FORMAT(edit_date,'%m/%d/%Y'),我可以在这里和网上找到,但无法让任何东西工作。希望有人能帮助我!


答案 1

获得相同的日期时间条目是非常罕见的,它给出的日期和时间最多为几秒钟。因此,为了获得适当的结果,我们需要忽略时间部分,并处理日期部分,从而使用函数。CURDATE()

您可以忽略时间部分,并使用以下方法与日期进行比较:

function get_ad_sql($table){
    $sql = "SELECT 
                * 
            FROM 
                ".$table." 
            WHERE 
                DATE(edit_date) = DATE_SUB(CURDATE(), INTERVAL 7 DAY)
            ";  
    return $sql;
}

答案 2

NOW() 返回 DATETIME 值,您应该使用 DATE 函数来获取不带时间的日期,例如 -

SELECT * FROM table WHERE edit_date = DATE_SUB(DATE(NOW()), INTERVAL 7 DAY);

如果字段类型是 DATETIME,则此字段也应由 DATE() 函数包装 -edit_date

SELECT * FROM table WHERE DATE(edit_date) = DATE_SUB(DATE(NOW()), INTERVAL 7 DAY);

推荐