MySQL从7天前精确选择行

Tim*_*urn 20 php mysql intervals

我完全被这个问题困住了,几个小时都在努力,但没有成功,希望有人可以提供帮助.尝试构建一个每天运行的cron脚本,返回比当前日期早7天的行.

问题是,我的查询没有返回任何内容.没有错误消息,没有(我知道过去7天数据库中有条目 - 我们每天大约有7000个条目,所以它们就在那里!)我尝试了SELECT*并在编辑日期成功回应,除了我的SQL脚本,一切正常.

我正在引用的列(edit_date)是使用Ymd hms格式化的'datetime'类型.此列始终在创建和编辑时分配了日期时间值.

function get_ad_sql($table){
    $sql = "SELECT 
                * 
            FROM 
                ".$table." 
            WHERE 
                edit_date = DATE_SUB(NOW(), INTERVAL 7 DAY)
            ";  
    return $sql;
}
Run Code Online (Sandbox Code Playgroud)

并调用该函数并"尝试"回显primary_key:

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

我已经尝试了DATE_SUB(NOW(),INTERVAL 7 DAY)的每个变体,包括CURDATE(),DATE_FORMAT(edit_date,'%m /%d /%Y'),我可以在这里和网上找到,但是不能'得到任何工作.希望可以有人帮帮我!

Gha*_*Mir 32

获得相同的日期时间条目非常罕见,日期和时间最多可达到秒.因此,为了获得适当的结果,我们需要忽略时间部分,并使用CURDATE()函数来处理日期部分.

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

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


Bra*_*rad 7

你的脚本正在运行...我非常怀疑你有7 天前(到第二天)的东西。

也许你想要一些东西WHERE edit_date>DATE_SUB(NOW, INTERVAL 7 DAY) AND edit_date<DATE_SUB(NOW, INTERVAL 6 DAY)

或者,如果您只想比较日期(而不是时间)部分,请比较 的输出DATE()


Dev*_*art 5

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

SELECT * FROM table WHERE edit_date = DATE_SUB(DATE(NOW()), INTERVAL 7 DAY);
Run Code Online (Sandbox Code Playgroud)

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

SELECT * FROM table WHERE DATE(edit_date) = DATE_SUB(DATE(NOW()), INTERVAL 7 DAY);
Run Code Online (Sandbox Code Playgroud)


小智 5

 SELECT SUBDATE(CURDATE(), 7)
Run Code Online (Sandbox Code Playgroud)

尝试这个。