MySQL删除超过X分钟的记录?

时间:2012-06-28 20:52:47

标签: php mysql sql

我搜索了很多,找到了一些最终没有为我工作的解决方案,并且无法理解原因。

我有一个带有时间戳列的表。此列的MySQL类型为' datetime'。我在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);

任何人都可以了解我做错了什么以及为什么它不能正常工作?

感谢。

5 个答案:

答案 0 :(得分:17)

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

尝试将列包裹在后面的刻度中,让MySQL知道你的意思是列,而不是保留字:

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

答案 1 :(得分:4)

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

`timestamp`

如果time_created是 unix时间戳(int),您应该可以使用以下内容:

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

(600秒= 10分钟 - 显然)

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

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)

Demo

答案 2 :(得分:0)

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

$date = new DateTime();
$date->modify("-10 minutes")

答案 3 :(得分:0)

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

答案 4 :(得分: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"). "'存储了日期和时间

Screenshot of Deleting After 10 minute code

Screenshot of the storage of Date and Time in the create_at field of table as described in answer