2009-09-08 9 views
1

J'ai des entrées de base de données qui ont une colonne de date (type de date mySQL). Je veux comparer cette date avec la date actuelle du serveur et avec 3 jours avant ce jour, tous les mois, pour envoyer automatiquement un e-mail à une adresse spécifiée.Comment comparer une date de mysql avec la date actuelle et envoyer une notification email

+0

Dépend langage de programmation et la plate-forme. –

+0

En PHP et MySQL. –

+0

Le serveur web est sur Linux –

Répondre

1
Well this is just a mock but you could try something like this: 

$localTime = `date +"%Y/%m/%d %H:%M:%S"` 

// Query MySQL to get datetime 

// compare the two times and send email 
1

Vous pouvez soit faire PHP ou MySQL faire le sale boulot pour vous, soit un script ou une instruction SELECT.

<?php 
// We shall assume that you have a array called $send_date with values in the format YYYY-MM-DD (MySQL Date Format). 
// These values will be the values in the date column, and this script will send the email 3 days before those dates. 

$today = date("U"); 
// Work out, in seconds, the amount of time beforehand you would like to send the email. 
$warning = 60 * 60 * 24 * 3; 
foreach($send_date as $timestamp) 
{ 
    $sd = strtotime($timestamp); 
    // If $sd is not an integer, it is not a valid timestamp. Move onto the next. 
    if(!is_int($timestamp)) continue; 
    $diff = $timestamp - $today; 
    if($diff > 0 && $diff <= $warning) 
    { 
    function_to_send_your_email($row_id_of_this_particular_date); 
    } 
} 

Ou une instruction SELECT:

$warning = 60 * 60 * 24 * 3; 
$today = date("U"); 
$sql = 'SELECT * FROM your_table WHERE TIMESTAMP(date_column) BETWEEN '.$today.' AND '.$today + $warning.';'; 
// Perform query, and act on results brought back. 

Le seul problème avec ce script, et PHP en général, est qu'il ne vérifie les trois jours (ou la valeur indiquée dans $warning) à l'avance seulement quand le script est exécuté. Si vous voulez qu'il continue à vérifier, je vous suggère de mettre en place un travail CRON. Et je ne peux pas garantir que l'un ou l'autre fonctionnera puisque je ne les ai pas vérifiés.

Espérons que cela vous donne de l'inspiration sur le sujet!

8

vous pouvez également utiliser la fonction MySQL TO_DAYS() plus simple:

SELECT email FROM table WHERE TO_DAYS(date)=To_DAYS(NOW())-3;