|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
![]() ![]() David S.Etudiant en alternance Inscription : août 2010 Messages : 1 167 ![]() |
Bonjour à tous et à toutes,
J'aimerai savoir s'il est possible d'incrementer un champ selon la valeur d'un autre champ avec un trigger! Je possede une table 'maj_table' qui contient 3 champs: id, id_maj, table_maj A chaque fois qu'une application est exécuté, des tables sont mis à jour et ajouté dans ma table 'maj_table'. La dernière table ajoutée est toujours la même (appelons la 'jouet'). Ce que j'aimerai c'est que la valeur du champ id_maj soit incrémenté à chaque execution de mon application. Voici un résultat que j'aimerai avoir: Code :
Quelqu'un aurait une idée ? Merci d'avance
__________________
![]() ![]() ![]() David55 |
||
|
|
00
|
|
|
#2 | |||
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Bonjour,
pour commencer, à ta place, je créerais une table pour referencer les tables : Citation:
ça évitera des erreurs (genre un même table orthographiée de deux façons différentes : livraison/livraisons) Et en plus cela améliorera les performances (le SGBDR travaillera sur des entier au lieu de chaines de caracteres...) Ensuite, j'éviterais de passer par un trigger pour faire ce que tu veux. dans la table maj_table, je mettrais trois colonnes : 1/ idMaj_Table 2/ dateheure 3/ idTable avec une simple requête utilisant une fonction de fenêtrage, tu pourras connaitre la version de mise a jour : Code SQL :
deux questions : 1/ pourquoi veux-tu faire cela(à quoi doit te servir id_maj par la suite) ? 2/ quel est ton SGBDR ? |
|||
|
|
10
|
|
|
#3 |
![]() ![]() David S.Etudiant en alternance Inscription : août 2010 Messages : 1 167 ![]() |
Merci de ta réponse.
1) Ceci me permet de gérer des script de synchronisation. Ainsi si il y a une erreur dans mes script je pourrait connaitre à quel moment (avec id_maj) et sur quel table il y a eu une erreur. il est donc plus simple de corriger l'erreur. 2) J'utilise MySQL
__________________
![]() ![]() ![]() David55 |
|
|
00
|
|
|
#4 | ||
![]() ![]() David S.Etudiant en alternance Inscription : août 2010 Messages : 1 167 ![]() |
A quoi sert ceci:
Code :
J'ai avancer dans mon problème d'une autre manière qui fonctionne presque mis à part un gros détail :p En faite j'ai créé une table stockant l'id_maj. J'aimerai qu'à chaque mis à jour (rencontre de la table 'jouet') je fais un update sur cette table pour incrémenter l'id qui me servira à faire mon insert par la suite. ( L'idée de base etant de faire un trigger sur la table maj_table qui updatera la table contenant l'id_maj si le champ table_maj inséré a pour valeur 'jouet' ) Avez vous une idée ou savait vous comment programmé l'idée en vert? (peut être que c'est la même mais je n'ai pas bien compris l'idée de la partition
__________________
![]() ![]() ![]() David55 |
||
|
|
00
|
|
|
#5 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Bonjour,
Cela sert à avoir le "numero de ligne" dans une fenêtre donnée, ici le numero de ligne est propre à chaque IDTable et ordonné selon la date et l'heure... Mais MySQL n'implémente pas ce type de fonction... mais pourquoi ne pas stocker simplement la date de mise à jour. cela te donnera suffisamment d'informations pour le débogage... Sinon, pour continuer sur ton idée de seconde table : ton application, avant de mettre à jour les tables, crée une ligne dans cette table et récupère l'ID autoincrémenté, pour l'inserer dans la table maj_table à chaque fois qu'elle met a jour une table. Pas besoin de trigger. En plus, s'appuyer sur le nom de la "dernière" table mise à jour, ça risque de rendre la maintenance compliquée... |
|
|
00
|
|
|
#6 | |
![]() ![]() David S.Etudiant en alternance Inscription : août 2010 Messages : 1 167 ![]() |
Merci pour ton aide, je vais m'en inspirer
Citation:
__________________
![]() ![]() ![]() David55 |
|
|
|
00
|
|
|
#7 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
heu... oui !
Par date, je sous entendais éventuellement les heures aussi, les minutes, les seconde, voire les millisecondes si besoin |
|
|
00
|
|
|
#8 | ||
![]() ![]() David S.Etudiant en alternance Inscription : août 2010 Messages : 1 167 ![]() |
si je prend en compte les secondes, j'aurai zapper plusieurs mis à jours (imaginons que l'utilisateur clique 2 fois sur mis à jours).
Cependant, j'ai trouvé une solution simple : Code :
__________________
![]() ![]() ![]() David55 |
||
|
|
00
|
|
|
#9 | ||
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
![]() Effectivement, le WHERE ne sert à rien, puisqu'il sera toujours vrai et je ne suis pas sur de bien comprendre le but de tout ça... au pire, pourquoi ne pas gérer dans votre application : quand vous insérez votre ligne dans table_maj : Code SQL :
|
||
|
|
10
|
|
|
#10 |
![]() ![]() David S.Etudiant en alternance Inscription : août 2010 Messages : 1 167 ![]() |
Oui merci ca pourrait aussi fonctionner. Je vais essayer de l'integrer.
__________________
![]() ![]() ![]() David55 |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com