Bonjour à tous,
J'espère que qqn saura m'éclairer.
Je monte actuellement une petite base de données et j'ai découvert le TRIGGER.
En voyant les possibilités conceptuelles dudit TRIGGER, j'ai vraiment accroché.
Malheureusement je me heurte à une petite difficulté.
Imaginons deux tables totalement identiques.
La premiere -> hdd_today
la seconde -> hdd_histo
Les champs sont : id_hdd - lettre - p_libre - date_hdd
je voudrais que lors d'un import dans la table hdd_today, les données soient dupliquées dans hdd_histo seulement si la date de hdd_today est plus grande de sept jours par rapport à la date la plus récente de hdd_histo (ne me fusillez pas maintenant)
Pour faire simple j'importe tous les jours dans ma bdd les espaces disques d'une centaine de serveurs et je veux passer une version de cette importation dans l'historique une fois tous les 7 jours.
Voici le TRIGGER que j'ai codé mais il ne fonctionne pas :
la fonction SELECT DATEDIFF(date1, date2) renvoie la différence en jours entre deux dates.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 CREATE TRIGGER COPIE_TABLE AFTER INSERT ON hdd_today FOR EACH ROW IF ((SELECT DATEDIFF(NEW.date_hdd,(SELECT date_hdd FROM hdd_histo ORDER BY date_hdd DESC LIMIT 0,1 )))<>0) THEN INSERT INTO hdd_histo(id_hdd,lettre,p_libre,date_hdd) VALUES (NEW.id_hdd,NEW.lettre,NEW.p_libre,NEW.date_hdd)
Mais je crois que je me suis un peu perdu dans ma logique, car :
renverra tout le temps la date la plus élevée de la base et je pense que dès le second traitement la condition ne sera plus remplie.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SELECT date_hdd FROM hdd_histo ORDER BY date_hdd DESC LIMIT 0,1
Attention id_hdd n'est pas unique, c'est l'id permettant de faire la jointure avec les serveurs
Si qqn a compris et peut m'aider ce serais vraiment super.
Merci par avance
Partager