Page 1 sur 1

update where un champ date...

Posté : 17 août 2005, 04:02
par Overseas
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:

Posté : 17 août 2005, 08:31
par Cyrano
Ton champ de date est de quel type dans ta table ?

Posté : 17 août 2005, 09:51
par Overseas
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.

Posté : 17 août 2005, 09:55
par Cyrano
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

Posté : 17 août 2005, 09:58
par ouckileou
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

Posté : 17 août 2005, 10:02
par Overseas
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