在我的表mytable
中。我有一个名为session_time (float)
的列,其中我在添加行时以微秒为单位存储时间(我使用PHP函数microtime(true)
来获取浮点数)。如何删除表格mytable
中超过20分钟的所有行?
我已经尝试过这样的事情:
DELETE FROM mytable WHERE session_time < DATE_SUB(NOW(), INTERVAL 1800 SECOND)
但这会删除所有行!
答案 0 :(得分:2)
更新中...
不应使用php microtime(true)
,而应使用MySQL函数NOW()。删除旧列,然后创建一个新列:
ALTER TABLE your_table ADD session_time DATETIME NOT NULL DEFAULT NOW();
现在当你添加一行时,它的session_time将自动设置为当前时间,你不需要为session_time插入任何值。
现在要删除超过30分钟的所有行,请使用:
DELETE FROM your_table WHERE TIMESTAMPDIFF(MINUTE,session_time,NOW()) > 30;
答案 1 :(得分:0)
尝试
DELETE FROM myTABLE WHERE session_time < (now() - interval 30 minute)
我没有测试它。我认为它应该也可以。
答案 2 :(得分:0)
PHP microtime()
使用unix时间戳格式,而不是DATETIME
格式。如果你存储这样的东西,你可以使用PHP来填充查询或使用MySQL的unix_timestamp()
function。
对于PHP,它将如此简单:
$query = 'DELETE FROM mytable WHERE session_time < '.time() - 1800;
我建议只在session_time
上使用DATETIME格式,但是你应该利用MySQL的存储类型。
答案 3 :(得分:0)
听起来您正在将PHP中生成的微秒值与mysql中生成的时间戳值进行比较。这里有一些问题可能会出错,因为你可能实际上并不是时间比较,而是时间浮动,或者你的PHP应用程序使用的时钟与你的mysql不同。
由于您在SQL中进行比较,因此您应该根据SQL保存session_time值。这是默认值的好地方,例如:
mysql> create table mytable ( id int not null, session_time timestamp default now() );