2010-06-07 29 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