如何使用ActiveRecord和mySQL函数删除记录作为WHERE条件

时间:2010-06-07 18:34:43

标签: codeigniter activerecord

我有一个名为ChatSessions的表,我跟踪聊天室中的活跃用户。我需要每隔10分钟从表中删除过期的用户会话。使用纯php-mysql很简单,但我完全不知道如何在CodeIgniter中将其转换为ActiveRecord。纯SQL查询如下:

SELECT *
FROM `ChatSessions`
WHERE `SessionExpires` < DATE_SUB( NOW( ) , INTERVAL 10 MINUTE )

有人可以告诉我使用ActiveRecord的CodeIgniter中的等效代码是什么?

2 个答案:

答案 0 :(得分:4)

以下代码应该这样做:

// You can use custom strings in the where() function
$where = "SessionExpires < DATE_SUB( NOW( ) , INTERVAL 10 MINUTE )";
// although you may need to set the third parameter to FALSE in order to stop CI from protecting your fields.
$this->db->where($where, null, false);
$this->db->delete('ChatSessions');

您也可以尝试以下方法(但我不知道这是否有效):

$where_condition = "DATE_SUB( NOW( ) , INTERVAL 10 MINUTE )";
$this->db->where("SessionExpires <", $where_condition, false);
$this->db->delete('ChatSessions');

答案 1 :(得分:2)

如果您已经拥有SQL,将其转换为ActiveRecord似乎是浪费时间。我只是直接执行SQL。

$sql = "DELETE FROM ChatSessions 
        WHERE SessionExpires < DATE_SUB( NOW( ) , INTERVAL 10 MINUTE )";
$this->db->query($sql);