2

我正在尝试运行一个函数,以便在说 1 分钟后将消息发布到数据库后,它会删除该行。

我的数据库如下所示:

       CREATE TABLE `messages` (
       `id` int(11) NOT NULL AUTO_INCREMENT,
       `user_id` int(35) NOT NULL,
       `account_number` int(25) NOT NULL,
       `message_content` text NOT NULL,
      `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
      `status` enum('1','0') NOT NULL,
       `txt` varchar(20) NOT NULL DEFAULT 'Unread',
        PRIMARY KEY (`id`)
         ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 COMMENT='Table for storing notifications/messages' AUTO_INCREMENT=27 ;

我当前的代码如下所示:

            $sql = "DELETE FROM messages WHERE created < DATE_SUB( NOW( ) , INTERVAL 2 MINUTE )";
    $this->db->query($sql);

基本上就像我在 1/2 分钟后所说的那样,这需要通过它所抓取的 ID 从数据库中删除消息,如何实现这一点,因为我上面显示的代码不起作用。我正在使用 ActiveRecord 它可以帮助任何人帮助我。

提前致谢。

4

2 回答 2

0

有几种方法可以解决这个问题,具体取决于您对服务器的访问。

  1. 使用 MySQL 事件 ( http://dev.mysql.com/doc/refman/5.1/en/events.html )。这将允许您在表的每次更新上执行您的 sql 查询。但是,您需要对数据库具有“超级”权限才能使用它。

  2. 使用crontab(unix) 或scheduled task(windows) 每分钟执行一次包含您的 sql 查询的 php 脚本。

  3. 将您的 sql 查询放在页面顶部。这当然不是完美的性能明智,但取决于您的站点/应用程序的繁忙程度或您的数据库/表的大小,我怀疑您会注意到差异。

供参考:此 sql 将起作用: DELETE FROM messages WHERE created < (NOW() - INTERVAL 30 SECOND)

于 2013-08-05T13:58:28.253 回答
0

如果您只想按 ID 删除单个消息,更好的策略是使用定期作业(如 cron)定期删除记录,或者使用除 Web 服务器之外的另一个进程来执行删除。然后,您可以标记要删除的记录,或将 ID 传递给该进程。

这有帮助吗?

于 2013-08-05T13:55:45.523 回答