从时间戳超过一天的MySQL表中删除行?

时间:2010-05-08 21:36:38

标签: php mysql date timestamp

我找到了完全相同的问题here

但它不适合我。我修改了一下,操纵它,我无法弄明白。我正在尝试删除超过一天的行。这是我的代码:

if (isset($_POST['prune'])) {

    $sql = "DELETE FROM logs WHERE time < date('now', '-1 days')";
    mysql_query($sql);

    echo 'Logs older than one day removed.';    

    }

我想这是一个相当简单的问题,但它却让我感到害怕。我将不胜感激任何帮助。

如果它有所不同,则该列为TIMESTAMP类型。

编辑:显然我是个白痴。我链接到你的问题与SQLite3有关。所以现在我的问题是,我怎样才能在MySQL中做到这一点?

3 个答案:

答案 0 :(得分:25)

您可以减去间隔:

DELETE FROM logs WHERE time < now() - interval 1 day

答案 1 :(得分:9)

对于SQLite3,答案是IIRC。您正在使用不支持此语法的MySQL。

您想使用DATE_ADD()功能(以下示例未经测试但应该有效):

DELETE FROM logs WHERE time < TIMESTAMPADD(DAY,-1,NOW());

答案 2 :(得分:0)

就我而言,只有

timestampadd

通过asc订购日期日历时,

正方向工作:

    if (urldecode ($aUrl['Select']) == '>')
        $this-> db-> where ('konzertdatum >', 'TIMESTAMPADD(DAY, 1, "'.  $id . '") ', false) ;
    else 
        $this-> db-> where ('konzertdatum < ', 'TIMESTAMPADD(DAY, -1, "'.  $id . '") ', false) ;

在负方向(-1),时间戳回到第一个条目。我也尝试不使用CodeIgniter,但结果相同。

总结,+1作为timestampadd的参数有效,-1适用于第二个最低的条目(然后跳回到第一个条目。但是当我离第一个日期更远时它失败了。