[SQL] Changement d'etat d'une table au bout de x jours

Nouveau WRInaute
Bonjour,

Ma base de données stocke les date au format unix_time.
J'aimerais que au bout de x jours (10 ici) l'etat passe de vie à mort (par exemple)

Code:
UPDATE table1 
LEFT JOIN table2 ON table2.id_table1=table1.id 
SET table1.etat='mort',table1.commentaire='Bonne nuit' 
WHERE table1.etat='vie' 
AND (ADDDATE(table2.last,10)-CURDATE())<0;

Sur la table 1 sont stocké les etat vie ou mort, sur la table 2 sont stockés les dates.
J'aimerais donc que lorsque la colonne last de la table 2 a une date ayant plus de 10 jours l'etat sur la table 1 passe de vie a mort.

Le soucis que je rencontre est que ce code ne fait rien sur la base.
Ma version de mysql :
Code:
# mysql -V
mysql  Ver 14.12 Distrib 5.0.45, for redhat-linux-gnu (x86_64) using readline 5.0

Voilà j'ai consulté la FAQ officielle MYSQL : http://dev.mysql.com/doc/refman/5.0/fr/date-and-time-functions.html
Mais TIMESTAMPADD et TIMESTAMPDIFF n'existe pas pour moi...

Pourriez vous m'aidez s'il vous plait? sachant que le SQL et moi... mais bon j'apprends, j'apprends XD
 
WRInaute occasionnel
Bonjour,

Personnellement, pour faire ce genre d'opération, j'utiliserais un cron. Je n'ai pas vraiment idée du but de ce passage de "vie" à "mort". Si c'est pour l'archivage, mieux vaudrait extraire les enregistrements concernés et les stocker dans d'autres tables. Si c'est pour un jeu, l'affichage du statut "mort" peut se faire avec un test sur la date dans le script de votre choix...
 
Nouveau WRInaute
Bonjour,

Merci pour la réponse.
Il s'agit justement d'un cron chargé d'executer une script SQL sur une table afin de simplement faire un changement de status de fiches.

Le soucis que je rencontre est que le cron ne s'execute pas et que nous ne voyons nul changement de status.

Pour des raisons logicielle les date sont stockés au format unix_time donc j'ignore si par hasard le soucis rencontré ne serais pas du a ce format.

Je vais essayer d'etre plus claire et de prendre un second exemple plutôt que vie et mort.
La table 1 de mon exemple contiendrais des fiches client par exemple ainsi que la date de derniers appel, la table 2 contient l'etat des fiches en cours/clos/perimé...
Je désire que via un cron s'executant quotidiennement les fiches notés comme en cours sur la table 1 et auquel la date de dernier appel sur la table 1 date de plus de 10 jours soient basculées sur l'etat clos ou périmé.

Or je n'arrive pas à le faire malgré mes recherches et la fouille du manuel, et je ne vois pas ou cela bug :/

Merci pour l'aide que vous pourriez m'apporter.
 
WRInaute accro
commence par tester ton script sans le cron
fait un select pour ressortir les champs a mettre a jour, voir ressort l'ensemble des champs si tu ne peux pas les attraper par rapport a la date souhaité
met ces enregistrement dans un tableau php
traite la date avec la fonction date ou mktime de php lors du test
puis fait une boucle sur le tableau avec le test et update pour ta mise a jour

de cette maniere tu pourras avancer pas a pas sur ton script et il sera simple a debugger
 
Discussions similaires
Haut