我已经搜索了很多,找到了一些最终对我不起作用的解决方案,并且不明白为什么。
我有一个带有时间戳列的表。 此列的 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);
谁能阐明我做错了什么以及为什么它不能正常工作?
谢谢。
由于 TIMESTAMP() 是返回当前时间戳的内置函数,因此查询永远不会返回任何结果。
尝试用反引号将列括起来,让MySQL知道你的意思是列,而不是保留字:
DELETE FROM adminLoginLog WHERE `timestamp` < (NOW() - INTERVAL 10 MINUTE);
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)
演示
我会用php生成时间戳,然后将其传递到您的mysql查询中:
$date = new DateTime();
$date->modify("-10 minutes")
您的查询是正确的,如果您有权访问 phpmyadmin,请在 SQL 控制台中执行该命令,该命令将为您提供更多信息。
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字段中存储日期和时间的屏幕截图,如答案中所述