2011-10-29 2 views
0

cron 작업 설정에서 구독 테이블의 값이 변경 될 때마다 24 시간마다 보게됩니다. 예를 들어 현재 날짜가 구독 종료 날짜 이상이되면, 상태 필드 값은MYSQL 필드가 변경된 경우 SELECT QUERY WITH QUERY를 보내고 MYSQL 필드가 변경된 경우 전자 메일을 보내십시오.

$curdate=date('Y-m-d'); 

$sql=("UPDATE subscription SET status='inactive' WHERE (end_date < '$curdate')"); 

내가 누구의 가입 그냥 같은 구독 테이블에 저장된 USER_ID를 검색해야하는 위의 cron 작업을 사용하여 만료 된 사용자에게 이메일을 보내 싶습니다 '비활성'이된다 ..

위의 UPDATE QUERY와 함께 SELECT QUERY를 실행하고 사용자의 user_id를 검색 할 수있는 방법이 있습니까? 구독이 만료 되었습니까?

감사합니다,

+0

업데이트하기 전에'SELECT userid FROM subscription WHERE status = 'inactive'및 end_date < '$ curdate'LIMIT 0, 1000'에 대한 쿼리를 수행하십시오. –

+0

Jared는 구독이 이전에 만료 된 많은 이전 사용자에 대해 (end_date < '$ curdate') MYSQL에 다른 많은 항목이 있으므로 작동하지 않습니다. 내가 cron이 그들을 매일 비 활동적으로 만들면서 end_date ABI

+0

'status = 'active''이어야합니다. 두 번째 문장의 의미가 확실하지 않습니다. –

답변

1

은 두 단계를 수행합니다

SELECT user_id 
FROM subscriptions 
WHERE status='active' AND (end_date < '$curdate') 

모든 만료 ID를 검색 할 수 있습니다. ID의리스트를 가지고 당신의 업데이트 쿼리로 물건 :

UPDATE subscriptions SET ... WHERE (user_id IN ($list_of_ids_from_before)) 

그런 다음 이메일을 생성하는 ID 목록을 다시 사용합니다.

+0

알다시피, 나는'status' 필드가 비활성화를위한 로직을 고려해도 필요한지 궁금합니다. –

+0

select 쿼리에서? 이전 실행에서 비활성화 된 사용자를 다시 스팸하고 싶지 않고 다시 활성화하지 않기로 결정한 사용자. –

+0

또는 알림을위한 다른 필드를 사용할 수 있습니다. 나는 일반적으로 "활동적이지 않은"논리가 매우 명확하다는 것을 나타냅니다. (일반적으로 답에 대한 설명이 아닙니다.) –

0

당신은

A. 당신의 선택 먼저 실행하고 만료되는 user_ids는 다음을 만료 쿼리를 실행할 수 있습니다. 처음 실패 할 경우 업데이트를 두 번 실행할 수있는 위험이 있습니다.

B. 당신은 만료 알림 큐에 기록 또는 크론 스크립트는 구독 테이블에 만료 날짜를 추가 할 수 있습니다 소비 및 이메일

에게

C를 생성 할 수 등을 작성하는 가입에 대한 트리거를 만들 수 있습니다 "오늘"만료 된 구독을 찾기 위해 테이블을 쿼리하십시오.

0

트랜잭션을 사용하고 먼저 동일한 WHERE 조건을 사용하여 SELECT 문을 실행하십시오.

관련 문제