11

我进行了相当多的搜索,发现了一些最终对我不起作用并且无法理解原因的解决方案。

我有一个带有时间戳列的表。此列的 MySQL 类型是“日期时间”。我从 PHP 中将以下内容插入到此表中。

date('Y-m-d H:i:s')

这输入,看起来像 MySQL 日期时间的正确值。

2012-06-28 15:31:46

我想使用此列删除早于 10 分钟的行。我正在运行以下查询,但它不起作用。它影响 0 行。

DELETE FROM adminLoginLog WHERE timestamp < (NOW() - INTERVAL 10 MINUTE);

谁能阐明我做错了什么以及为什么它不能正常工作?

谢谢。

4

5 回答 5

18

由于 TIMESTAMP() 是一个返回当前时间戳的内置函数,因此您的查询将永远不会返回任何结果。

尝试将列包装在反引号中,让 MySQL 知道您的意思是该列,而不是保留字:

DELETE FROM adminLoginLog WHERE `timestamp` < (NOW() - INTERVAL 10 MINUTE);
于 2012-06-28T20:58:46.527 回答
4

timestamp是mysql中的保留关键字。要timestamp用作字段名称,您必须将其放在反引号中,如下所示。

`timestamp`

如果 time_created 是一个unix timestamp (int),你应该能够使用这样的东西:

DELETE FROM adminLoginLog WHERE `timestamp` < (UNIX_TIMESTAMP() - 600);

(600 秒 = 10 分钟 - 显然)

否则(如果 time_created 是mysql timestamp),你可以试试这个:

DELETE FROM adminLoginLog WHERE `timestamp` < (NOW() - INTERVAL 10 MINUTE)

更新 1

DELETE FROM adminLoginLog WHERE `timestamp` < DATE_SUB( CURRENT_TIME(), INTERVAL 10 MINUTE)

更新 2

DELETE FROM adminLoginLog WHERE `timestamp` < DATE_SUB( NOW(), INTERVAL 10 MINUTE)

演示

于 2012-06-28T21:08:55.650 回答
0

我会在 php 中生成时间戳,然后将其传递给您的 mysql 查询:

$date = new DateTime();
$date->modify("-10 minutes")
于 2012-06-28T21:02:50.947 回答
0

您的查询是正确的,如果您有权访问 phpmyadmin,请在 SQL 控制台中执行该命令,该命令将为您提供更多信息。

于 2012-06-28T21:17:59.747 回答
0

PHP代码:

//Your Database Details

$conn = mysqli_connect("localhost","root","","tifu");

//Actual Core thing

$delete_otp = mysqli_query($conn,"DELETE FROM temp_project_member_details WHERE create_at < ('" . date("Y-m-d H:i:s"). "' - INTERVAL 10 MINUTE)"); 

注意:这里 temp_project_member_details :数据库tifu中的表名

和 create_at :表 temp_project_member_details 中的字段名称,其中使用相同的函数存储日期和时间'" . date("Y-m-d H:i:s"). "'

10分钟后删除代码截图

如答案所述,在表的 create_at 字段中存储日期和时间的屏幕截图

于 2019-01-01T14:36:51.187 回答