2013-03-14 5 views
0

내 사용자가 광고를 게시 할 수있는 웹 사이트를 만들었습니다.특정 시간 후에 자동으로 행을 업데이트합니다.

이제 특정 시간 후에 광고 테이블에서 한 행을 자동으로 변경하고 싶습니다.

예 : 사용자가 광고를 업로드/게시하고 게시물을 게시하기 전에 8 일 또는 16 일 동안 내 보이드를 유지할지 여부를 결정합니다.

크론으로 이것을 확인해야할까요, 아니면 더 좋은 방법이 있을까요? 눈에 보이는

는 "활성화"를 DB라고 - TINYINT 1 또는 사전에 0

덕분에,

답변

0

이 두 가지를 모두 관리 할 수있는 두 가지 옵션이 있습니다.

  1. 광고에 만료 시간을 저장하고 만료> NOW(); 어떤 쿼리에서이 종류의 '활성'필드에 대한 요구 사항을 부정 (광고를 선택합니다.

  2. 이를 관리하는 이벤트를 사용합니다.

방법 1 광고를 정리하는 '일부 관리자가 필요할 수 있습니다 '을 주기적으로 사용합니다.

방법 2 - 아직 프로 시저에서 이벤트를 만들 수 없지만 (내가 마지막으로 확인한 경우) 다른 체크와 무언가를 실행하지 않고 이러한 종류의 관리 업무를 설정하고 잊어 버릴 수 있습니다.

각 이벤트에는 고유 한 이름이 있어야합니다.

<?php 

$qry = "insert into ads values ('x', 'y', 'z');"; 
/* db execute qry (pdo or what ever) */ 
$adId = // retriev a unique reference for ad. 
$days = $_POST['expire'] == 16 ? 16 : 8; 

$qry = "CREATE EVENT updateAd_".$adId." 
    ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL ".$days." DAY 
    ON COMPLETION NOT PRESERVE 
    DO 
    update ads set active = 'false' where ad_id = ".$adId.";"; 
// db execute qry (pdo or what ever); 
?> 

이벤트는 MySQL 데이터베이스에 저장되어 있지 자신이 구현하는 일부 관리자 수준의 권한이 필요하므로 : 그렇지 않으면 당신은

예 ... 경우 이미 지정된 죽일 것이다.

+0

감사합니다 이안! 그것은 완벽하게 작동했습니다! –

1

이 대신 유효 기간을 유지 할 수 있습니까? 그래서 당신이 날짜를 저장하는 열을 만듭니다. 사용자가 광고를 만들면 지금부터 8 일 후에 날짜를 계산하고이를 열에 저장하십시오. 그런 다음 광고를 가져 오는 쿼리에서 만료 날짜가 아직 남아있는 광고로 제한 할 수 있습니다.

0

만료 날짜를 저장하십시오. 당신이 PHP가 strtotime 기능을 체크 아웃 사용하는 경우

select * from table where Expiration_date>now(); 

: 그런 다음 쿼리를 사용합니다. 당신과 같이 당신의 날짜를 생성하는 데 사용할 수 있습니다 :

$expiration = date("Y-m-d H:i:s",strtotime('+ '.$num.'days')); 

당신은 '활성'필드가 필요하지 않은 '만료'필드가있는 경우. 성명서

select Expiration_date>now() as active from table 

은 같습니다.

+0

답변 해 주셔서 감사합니다. 죄송합니다. 내 질문에 모두 잘못되었습니다. 필자는 타이머의 일종을 추가하려고 했으므로 8 일 또는 16 일 후에 "활성"필드가 1에서 0, 참/거짓으로 변경됩니다. 테이블에 게시 된 시간과 만료일이 모두 있습니다. 감사! –

+0

'Expiration_date'필드가있는 경우 '활성'필드는 필요하지 않습니다. "select expiration_date> now()"테이블에서 활성화 된 문은 동일합니다. –

관련 문제