【问题标题】:PHP/MySQL Deleting before intervalPHP/MySQL 间隔前删除
【发布时间】:2014-04-15 15:25:21
【问题描述】:

所以我希望我的 MySQL 行在被所述用户添加 2 小时后删除。

这就是我所拥有的;

$Link = MySQL_Connect // etc

$now = date('Y-m-d H:i:s', time())

$query = "DELETE FROM my_table WHERE time < NOW() - INTERVAL 2 HOUR";
$result = mysql_query($query) or die ('unable to run: ' .mysql_error());

但是当我运行它时,它会删除每一行,即使它还没有 2 小时。

如果这有帮助,我的插入查询;

$now = date('Y-m-d H:i:s', time());
 mysql_query ("INSERT INTO my_table (name, email, time) values ('$Name', '$Email','$now')");
    echo 'Proceed';

【问题讨论】:

  • 首先想到的是确保“时间”是 DATETIME...
  • 是的,我确实将它设置为日期时间,不过谢谢!

标签: php mysql intervals


【解决方案1】:

试试这个:

$query = "DELETE FROM my_table WHERE DATE_ADD(`time`, INTERVAL 2 HOUR) < NOW()";

它会为您的列值增加两个小时,如果它小于当前时间,它将被删除。

SQL Fiddle

【讨论】:

  • no...如果时间是 11 而现在是 12,那么 11 > 12-2 是真的,所以它会被删除,这不是我们想要的...
  • 我不得不停下来想一想,但你是对的。我适当地改变了逻辑。
  • 别担心,我必须检查 4 次才能确定...这些事情总是很复杂,这就是为什么我只是填写时间,这样更容易弄清楚...
  • @Shanie93 我两分钟前刚刚更改了我的代码。你用过那个代码吗?还是我原来的帖子?
  • 好的。我有 2 个测试条目... 一个来自 30 分钟前,另一个来自 42 分钟前。我将查询更新为您编辑的回复,但是,更改间隔以测试我最近的行,这次我最终每次删除 0 行,我什至尝试了 5 分钟间隔
【解决方案2】:

你的 MySQL 服务器和你的 HTTPD 是同一台机器吗(我知道我的不是)?因为你从 PHP 服务器插入你的 MySQL 数据,然后与 MySQL 时间比较......

这样插入可能会更好:

 INSERT INTO my_table(name,email,time) VALUES ('$name','$email',NOW())

至少这将确保比较正确的时间......

还要确保将 TIME 定义为 DATETIME,而不仅仅是 DATE

【讨论】:

  • 是的,它们在同一台机器上,时间戳是相同的,但为避免混淆,我已将插入查询更改为您上面的查询,并且运行良好,谢谢!现在只是完成删除代码
  • 你确定他们在同一时间吗?如果此插入代码修复了它,您的 PHP 很可能设置在与 MySQL 不同的时区
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 2015-01-11
  • 2014-01-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多