2013-08-05 2 views
2

1 분 후에 메시지가 데이터베이스에 게시되면 해당 행이 제거되도록 실행하는 기능을 얻으려고합니다.Codeigniter - 1 분 후에 레코드 삭제

내 데이터베이스는 다음과 같습니다 :이에 의해 데이터베이스에서 메시지를 제거 할 필요가 1/2 분했다 기본적으로 같은

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

:

 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 ; 

내 현재 코드의 모습 ID가 잡히는 중입니다. 위의 코드가 제대로 작동하지 않기 때문에 어떻게이 작업을 수행 할 수 있습니까? 누구든지 나를 도울 수있는 ActiveRecord를 사용하고 있습니다.

미리 감사드립니다.

+2

귀하의'DELETE'에 관계없이 정말 짝 아니'ID' – user20232359723568423357842364

답변

0

단일 메시지 만 ID로 삭제하려는 경우 정기적 인 간격으로 레코드를 삭제하거나 삭제를 수행하는 웹 서버 이외의 다른 프로세스가있는 cron과 같은 정기적 인 작업을 수행하는 것이 더 좋습니다. 그런 다음 삭제할 레코드에 플래그를 지정하거나 해당 프로세스에 ID를 전달할 수 있습니다.

도움이 되었습니까?

+1

의 모든 메시지를 삭제 할 수 있도록, ID''참조하지 않습니다, 그것은이다 좀 전에 facbook 통보와 같은 많은 분 후에 사용자가 메시지를 읽는다면 그것을 읽어야한다. X 분 후에 메시지를 제거해야한다. (테스트 목적으로 이제는 1 분으로 설정하지만 라이브 서버에서는 7 일로 설정됩니다. –

+0

기본적으로 'last_updated_time'과 같은 것이 필요하며, 임계 값 (7 일 또는 그 이상)보다 오래된 경우 레코드를 삭제해야합니까? –

+0

그렇습니다. Codeigniter를 사용하면 어떻게됩니까? –

0

서버 액세스에 따라 몇 가지 방법으로 해결할 수 있습니다.

  1. MySQL 이벤트 (http://dev.mysql.com/doc/refman/5.1/en/events.html)를 사용하십시오. 이렇게하면 테이블의 각 업데이트에 대한 SQL 쿼리를 실행할 수 있습니다. 그러나 이것을 사용하려면 데이터베이스에 "SUPER"권한이 필요합니다.

  2. 매분마다 SQL 쿼리를 포함하는 PHP 스크립트를 실행하려면 crontab (유닉스) 또는 scheduled task (창)을 사용하십시오.

  3. 페이지 상단에 SQL 쿼리를 넣으십시오. 이것은 당연히 완벽한 성능은 아니지만, 사이트/애플리케이션이 얼마나 바쁜 지 또는 데이터베이스/테이블이 얼마나 큰지에 따라 그 차이를 알 수 있을지는 의문입니다.

참고 :이 SQL 작동합니다 : DELETE FROM messages WHERE created < (NOW() - INTERVAL 30 SECOND)

+0

sql 당신은 내가 그것을 시도하고 말을 내 성명을 변경했습니다 상태가 0으로 설정되어 있다는 것을 의미합니다 사용자가 메시지를 읽은 다음 그것을 제거합니다. status = '0'이고 <(NOW() - INTERVAL 2 MINUTE)가 생성 된 메시지에서 삭제 –

+0

Ok ..하지만 작동 했습니까? :) 그렇다면 대답을 수락하십시오 (대답 앞의 확인란). –

관련 문제