我正在尝试运行一个函数,以便在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它可以帮助任何人帮助我。
提前致谢。
答案 0 :(得分:0)
如果您只想按ID删除单个邮件,则更好的策略是使用定期作业(如cron)定期删除记录,或者使用除Web服务器以外的其他进程执行删除操作。然后,您可以标记要删除的记录,或将ID传递给该过程。
这有帮助吗?
答案 1 :(得分:0)
根据您对服务器的访问权限,有几种方法可以解决此问题。
使用MySQL事件(http://dev.mysql.com/doc/refman/5.1/en/events.html)。这将允许您对表的每次更新执行sql查询。但是,您需要在数据库上使用“SUPER”权限才能使用此权限。
使用crontab
(unix)或scheduled task
(windows)执行php
每分钟包含sql查询的脚本。
将您的SQL查询放在页面顶部。这当然不是完美的性能,但取决于您的网站/应用程序的繁忙程度或数据库/表格的大小,我怀疑您会注意到差异。
供参考:这个sql会起作用:
DELETE FROM messages WHERE created < (NOW() - INTERVAL 30 SECOND)