【问题标题】:Timestamp comparison to delete when mysql timestamp > 20 minutes当mysql时间戳> 20分钟时删除时间戳比较
【发布时间】:2012-07-19 19:21:10
【问题描述】:

我想做一些不复杂的事情,但即使我尝试了很多东西,我也没有成功......

首先,我有一个带有一行时间戳类型的数据库mysql。我在其中插入日期如下的元素:

$date = date('Y-m-d H:i:s', time());
$req =mysql_query("INSERT INTO my_table (id, departement, voie, date,message)
    VALUES ('', '$departement_token', '$voie_token','$date' , '$message_token')");

此代码行的结果是这样的日期元素:2012-07-19 20:18:17

我想删除所有带有date > current date + 20 minutes 的元素,但我没有成功...

我试过了:

mysql_query("DELETE FROM my_table WHERE  DATE_SUB(date,INTERVAL 20 MINUTE) ORDER BY date");

还有这个:

$req=mysql_query("DELETE FROM my_table WHERE date >= TIMESTAMPADD(MINUTE,-20,NOW())
                  ORDER BY date");

还有这个:

$timePlus20min = time() + 1200;
//et on compare les deux dates
$req = mysql_query(
    "DELETE FROM my_table WHERE UNIX_TIMESTAMP(date) >= '$timePlus20min' ORDER BY date");

但这些都不起作用。你能帮我吗,我认为这不是太难,但我没有想法......

【问题讨论】:

  • 如果您向我们展示您的表格结构可能会有所帮助。好吧,也许你得到的错误。

标签: php mysql timestamp comparison sql-delete


【解决方案1】:
$period=date('Y-m-d H:i:s',time()-(60*60*6)); // 6 hour before

"SELECT * FROM limitlessisa WHERE UNIX_TIMESTAMP(REG) > UNIX_TIMESTAMP('$period')";

REG // timestamp row name

这是有效的。列出数据前 6 小时

【讨论】:

  • $delete=mysql_query("DELETE FROM session WHERE TIME
【解决方案2】:

在所有查询中,您都忘记了 WHERE 关键字,因此它们在语法上是错误的。此外,ORDER BY 语句无效,因为您没有执行SELECT 查询。没有可以订购的结果。相反,单个表 DELETE 查询返回 a count of the number of deleted rows

DELETE FROM my_table WHERE date >= DATE_ADD(NOW(), INTERVAL 20 MINUTE);

由于我不知道你的表结构,我用下表尝试了这个查询:

CREATE TABLE `datetest` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=3 ;

【讨论】:

  • 不用担心,但还有更多遗漏,您没有将dateDATE_SUB 结果进行比较。
  • 它说什么?这个对我有用。它会在 20 分钟后删除所有带有 date 的条目。
  • 我也是 phpmyadmin 的新手,我怎样才能为您检索要显示的表格结构?
  • 如果不存在则创建表 mytable ( id int(10) unsigned NOT NULL AUTO_INCREMENT, departement varchar(120) NOT NULL, voie varchar(120) NOT NULL, @ 987654335@ timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, message varchar(120) NOT NULL, PRIMARY KEY (id) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=151 ;
  • 创建了您的表,运行了我的查询 => 有效。您收到错误还是删除了错误的行?
【解决方案3】:

试试这个:

$req=mysql_query("DELETE FROM my_table WHERE date <= ".date("Y-m-d H:i:s", mktime(date("H"), date("i")-20, date("s"), date("m"), date("d"), date("Y")));

Bonne chance à toi / 祝你好运

【讨论】:

  • 尝试转储请求并查看生成的日期是否真的是“now-20mn”,如果是,则查询似乎很好:(
  • 此解决方案完美运行!非常感谢 !但是我会稍微修改一下这样的代码(可能是括号错误..): $reqDate= date("Y-m-d H:i:s", mktime(date("H"), date("i")- 20、日期(“s”)、日期(“m”)、日期(“d”)、日期(“Y”))); $req=mysql_query("DELETE FROM rmytable WHERE date
【解决方案4】:

试试这个:

DELETE FROM my_table WHERE UNIX_TIMESTAMP(date) > 60 * 60 * 20 + UNIX_TIMESTAMP();

【讨论】:

  • “试试这个:”subpar answer decoration。相反,请添加对您的代码的什么为什么推荐它或如何得出结论的简要说明。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多