我搜索了很多,找到了一些最终没有为我工作的解决方案,并且无法理解原因。
我有一个带有时间戳列的表。此列的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);
任何人都可以了解我做错了什么以及为什么它不能正常工作?
感谢。
答案 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)
DELETE FROM adminLoginLog WHERE `timestamp` < DATE_SUB( CURRENT_TIME(), INTERVAL 10 MINUTE)
DELETE FROM adminLoginLog WHERE `timestamp` < DATE_SUB( NOW(), INTERVAL 10 MINUTE)
答案 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