我找到了完全相同的问题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中做到这一点?
答案 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
正方向工作:
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
适用于第二个最低的条目(然后跳回到第一个条目。但是当我离第一个日期更远时它失败了。