我想从列中超过7200秒的表中删除行。
查询
mysql_query("delete from logged where DATE_ADD ( log, INTERVAL $this->loginDuration SECOND) < NOW()",$this->link);
其中:
name of table = logged;
name of column = log;
$this->loginDuration = 7200;
The value of log in db: 2011-06-25 09:56:51.
Todays date and time [ Now() ] : 2011-07-05 11:39:02
该查询旨在删除日志值为2011-06-25 09:56:51
的行,因为它早于7200秒,但却没有。
我不对的是什么?
答案 0 :(得分:3)
DATE_ADD
与括号之间有空格:( log, ...
。
使用DATE_ADD( log, ...
来自MySQL docs, Functions and Operators :
请注意
默认情况下,必须没有 函数名称和。之间的空格 跟随它的括号。这个 帮助MySQL解析器区分 函数调用和引用之间 到发生的表或列 与函数同名。 但是,功能周围的空间 允许参数。
和
你可以告诉MySQL服务器 接受函数名后面的空格 用它开始吧
--sql-mode=IGNORE_SPACE
选项。 (见Section 5.1.6, “Server SQL Modes”。) 个别客户端程序可以请求 这种行为通过使用CLIENT_IGNORE_SPACE
选项 mysql_real_connect()。在任一情况下, 所有功能名称都保留 词语的
答案 1 :(得分:0)
我想告诉你我做了什么(不能将其作为评论发布)
+----------------------+
| temp.d(table.column) |
+----------------------+
| 2011-07-05 22:08:20 |
| 2011-07-05 22:08:20 |
| 2011-07-05 22:08:21 |
| 2011-07-05 22:08:21 |
| 2011-07-05 22:08:22 |
| 2011-07-05 22:08:22 |
| 2011-07-05 22:08:23 |
| 2011-07-05 22:08:23 |
| 2011-07-05 22:08:24 |
| 2011-07-05 22:08:24 |
+----------------------+
10行(0.00秒)
mysql> delete from temp where DATE_ADD(d, INTERVAL 1 SECOND) < NOW();
查询OK,10行受影响(0.01秒)