2013-06-28 7 views
7

Ho un correttore automatico che controlla domini che stanno per scadere entro i prossimi 7 giorni e invia e-mail al cliente.come selezionare le righe da un database in php dove il campo data è 7 giorni in futuro

Im usando questa query SQL:

$sql="SELECT * from domain_names where (status = '' or status = 'valid') and date(expiry_date) = date(now() + interval 7 day) "; 

funziona bene, ma se si ferma in esecuzione e passa giorno passato non farà i domini che ha perso. qual è il modo migliore per far sì che anche i domini vengano persi?

ad esempio se un dominio scade il 7 e viene eseguito il primo, esso vedrà quel dominio e invierà un'e-mail al cliente, quindi metterà un flag sulla riga per dire che l'email è già stata inviata ma se il controllore non funziona su il 1 ° e ricomincia a correre il 2 ° non vedrà quel dominio (riga)

+1

Buona idea, quella bandiera, quindi qual è esattamente la domanda? – fvu

+0

funziona bene, ma se smette di funzionare e passa un giorno, non farà i domini che ha perso. qual è il modo migliore per far sì che anche i domini vengano persi? –

+0

Utilizzare un evento MySQL per eseguirlo ogni giorno in base a una pianificazione. –

risposta

0

Si sta controllando solo per giorni esattamente 7 giorni avanti. Vuoi controllare fino a 7 giorni prima. Modificare il codice per:

Dal momento che si dispone di una bandiera qualsiasi già inviato via email entro questo periodo non sarà possibile ottenere di nuovo inviato via email.

+0

questo sta facendo TUTTE le righe nel database? –

0

Si desidera controllare dove DATE è MENO O UGUALE (oggi + 7 giorni).

Si dovrebbe anche avere una sorta di "bandiera" nella tabella, come ad esempio reminderSent - in modo da non inviare più promemoria ogni volta che viene eseguita la query/script.

$sql = "SELECT * from domain_names WHERE 
    (status = '' or status = 'valid') AND 
    date(expiry_date) <= date(now() + interval 7 day) AND 
    AND !reminderSent"; 
0

Poiché si dispone di una bandiera per indicare se è stata inviata un'e-mail. Basta controllare lo stato di flag per tutti i domini che stanno per scadere nei prossimi 7 giorni.

E la query restituisce solo i domini che scadono una settimana dal presente. Modifica per restituire domini in scadenza entro i prossimi 7 giorni.

0

In sostanza, è necessario inviare la posta se entro il periodo di 7 giorni OPPURE ha un contrassegno incompleto.

Vorrei tuttavia modificare la colonna da una stringa in un intero come realmente ha solo due valori sent o not sent esempio 1 o 0.

SELECT 
    * 
FROM 
    domain_names 
WHERE 
    status = 0 
OR 
    expiry_date BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 7 DAY) 

In questo caso, fornendo si aggiorna il campo di stato 1 sarai sempre in grado di inviare la prossima volta quando lo script fallisce.

0

Forse avete bisogno di qualche intervallo di date come:

$sql="SELECT * from domain_names where (status = '' or status = 'valid') and date(expiry_date) between date(now()) and date(now() + interval 7 day)"; 
0

Aggiungere una data elaborato al record. Questo è due volte, ti dà il flag elaborato, ma ti dà anche un riferimento storico per quando è stata inviata la notifica.

Nella query, aggiungere una condizione che indica che la data di elaborazione è nullo e la data di scadenza è inferiore o uguale a oggi più 7 giorni.

(pseudo) where ... and processed_date is null and expiry_date <= today + 7 

quando si è alla ricerca di record dopo un mancato

0
This should give the result as you need: 

DATE_SUB(CURDATE(),INTERVAL 7 DAY) = expiry_date; 
You can refer to the link below for more details: 

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html 
0

Impostare un evento CRON sul lato server, se il vostro host web fornisce. Quindi puoi farlo girare tutte le volte che vuoi, senza doversi preoccupare di interruzioni di corrente o interruzioni di internet.

0

Prova con questa query. Userà pieno per voi ..

$ sql = "SELECT * da domain_names dove (status = '' o status = 'valido') e DATE_ADD (EXPIRY_DATE, INTERVALLO 7 GIORNI)";

0

Oppure è possibile configurarlo in php utilizzando una variabile al posto della data corrente più 7 giorni come;

$nextWeek=date("Ymd")+7; 
$sql="SELECT * from domain_names where (status = '' or status = 'valid') 
and date(expiry_date) <= $nextWeek) "; 

qualsiasi formato data che si utilizza, è necessario scambiare "Ymd" se diverso, che è 20140621 mentre scrivo questo si tradurrebbe in 20140628.

minuscolo m e minuscole d permettono per due giorni e mesi cifre "06" o "01". maiuscola credo cambierà a una sola cifra .... 2014621 ed è possibile modificare l'ordine e mettere "/" o "-" come in:

data ("MGA") 7 = 6-28- 2014

data ("d/M/Y") + 7 = 28/6/2014

1

Basta una piccola modifica nel codice del tuo (Mettendo '<'):

0

È possibile utilizzare questo codice.

$sql = SELECT * from domain_names where (status = '' or status = 'valid') and date(expiry_date) = DATE_ADD(date(now()), INTERVAL 7 DAY); 

Essa può aiutare ...

0

Avete preso in considerazione l'aggiunta di un registro di quando yo ultima verifica i record di scadenza e quindi utilizzando tale data come la variabile in modo da poter controllare da quella data ultima ogni il tempo di esecuzione del codice?

Problemi correlati