2010-06-07 54 views
3

我有一个名为ChatSessions的表,我跟踪聊天室中的活动用户。我需要每10分钟从表格中删除过期的用户会话。使用纯php-mysql很简单,但我完全不知道如何将其转换为CodeIgniter中的ActiveRecord。平原SQL查询如下:如何删除使用ActiveRecord与mySQL函数的记录在哪里条件

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

谁能告诉我什么是使用ActiveRecord CI中的等效代码?

回答

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'); 
+0

我不认为ActiveRecord允许在WHERE条件下的函数,我们需要使用set($ field,$ value)作为Select()的相同原因 – 2010-06-09 00:07:25

+0

用户指南给出了这个例子:$ this-> db-> where 'MATCH(field)AGAINST(“value”)',NULL,FALSE); – Kurucu 2010-06-09 06:18:42

2

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

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

感谢您的答复。是的,这让我想到了,但我试图摆脱“直接”查询,以保持我的代码的某种一致性。但我仍然没有想到如何处理ActiveRecord。 – 2010-06-07 23:06:29