【问题标题】:Removing rows from MySQL table where the timestamp is over one day old?从时间戳超过一天的 MySQL 表中删除行?
【发布时间】:2010-05-08 21:36:38
【问题描述】:

我发现了完全相同的问题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 中做到这一点?

【问题讨论】:

    标签: php mysql date timestamp


    【解决方案1】:

    你可以减去一个区间:

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

    【讨论】:

      【解决方案2】:

      那个答案是 SQLite3 的 IIRC。您正在使用不支持此语法的 MySQL。

      您想使用DATE_ADD() 函数(下面的示例未经测试但应该可以工作):

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

      【讨论】:

      • 这可以解释问题。谢谢。
      【解决方案3】:

      就我而言,只有

      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 适用于第二低的条目(然后跳回第一个。但是当我远离第一个日期时它会失败。

      【讨论】:

      • 编程生活可以很简单,为了让负方向工作,我忘记了desc,现在它去了
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-30
      • 2019-12-10
      • 2019-03-08
      • 2021-05-20
      • 1970-01-01
      相关资源
      最近更新 更多