update where un champ date...

Eléphanteau du PHP | 30 Messages

17 août 2005, 04:02

Bonjour,

je lis depuis longtemps ce forum :D , mais cette nuit je suis amené à poster :oops: :

j'ai une table où vont régulièrement se périmer des enregistrements.
Un enregistrement est automatiquement périmé au bout de 30 jours, soit :

$thedate = date("Y-m-d H:i:s") ;
$dacejour = strtotime($thedate) ;
$flottante = $dacejour-2592000 ; // 30 jours = 30 * 60 * 60 * 24

Comme j'aimerais éviter de passer par un Loop pour convertir chaque date :lol: , comment effectuer l'équivalent de l'update ci-dessous ?
$perimed = mysql_query("update annonce set stop_an = '2' where date_an < $flottante") ;
$altered = mysql_affected_rows() ;

je me doute que si ça ne marche pas (et ça ne marche pas :roll: ), c'est parce que date_an n'est pas "compatible" avec la valeur $flottante... :wink:

Mammouth du PHP | 19672 Messages

17 août 2005, 08:31

Ton champ de date est de quel type dans ta table ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 30 Messages

17 août 2005, 09:51

tout d'abord merci pour la réponse rapide, je n'aurais pas dû aller me coucher ! :-"

le champ date_an est en datetime, donc à la seconde près, d'où le calcul de flottant. :wink:
Ce type de calcul marche évidemment très bien lorsque l'utilisateur prolonge ou rends un enregistrement manuellement obsolète.
Modifié en dernier par Overseas le 17 août 2005, 10:22, modifié 1 fois.

Mammouth du PHP | 19672 Messages

17 août 2005, 09:55

TU pourrais faire ça directement en SQL, les fonctions de manipulations de dates sont nombreuses. Tu peux donc déterminer le nombre de jour dans une clause WHERE pour faire ton UPDATE

Ue visite s'impose dans la doc de MySQL sur le sujet
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

17 août 2005, 09:58

plutôt que faire les calculs toi même, pourquoi ne pas confier ça à MySQL ?
suivant la version que tu utilises, un truc de ce genre là serait moins compliqué

Code : Tout sélectionner

update annonce set stop_an = '2' where date_an > DATE_ADD(date_an, INTERVAL 30 DAYS)
voir aussi DATEDIFF disponible depuis MySQL 4.1

Eléphanteau du PHP | 30 Messages

17 août 2005, 10:02

Parfait ! =D> c'est exactement ce qu'il me fallait !

je vais étudier ça... :boire9:

Merci ! :agenouille:

Vu. La prop' de ouckileou, adaptée, ne donne pas le résultat escompté, j'ai finalement mis :
update annonce set stop_an = '2' where TO_DAYS(NOW()) - TO_DAYS(date_an) > 30

Désopilant de simplicité, et sans aucun calcul ! :D