Partage
  • Partager sur Facebook
  • Partager sur Twitter

[mysql] Trigger after update

Sujet résolu
    3 septembre 2019 à 16:43:23

    Bonjour

    Je souhaiterais comparer et déterminer les colonnes qui ont été modifiées après un update, l'idée de départ était de comparer toutes les colonnes en hard codant comme suit :

    IF OLD.column1<> NEW.column1 THEN ...

    IF OLD.column2<> NEW.column2 THEN ...

    ....

    IF OLD.columnN<> NEW.columnN THEN ...

    Mais le soucis c'est que si plus tard je me retrouvais avec 1000 colonnes, je pense que je n'aurais pas le courage de faire des copiers collers, du coup serait il possible de générer dynamiquement du code en faisant des CONCATs de IF ?

    Merci pour vos réponses.  

    • Partager sur Facebook
    • Partager sur Twitter
      3 septembre 2019 à 17:32:30

      Bonjour,

      unchained77 a écrit:

      serait il possible de générer dynamiquement du code en faisant des CONCATs de IF ?

      Pour répondre directement à la question, tu pourrais imaginer générer le SQL qui va créer le TRIGGER dans une procédure avec un curseur qui boucle sur les noms de colonne de la table en question et une requête préparée. Cela signifie que le TRIGGER est supprimé et recréer à chaque fois ... vraiment pas glop ...

      Pour ne pas répondre directement à ta question et t'en poser une autre ... pourquoi demander cela au SGBD ? En quoi est-ce le SGBD qui va utiliser l'information "telle colonne a sa valeur qui a été modifié" ? Dans quel contexte te retrouves-tu en besoin de savoir quelle colonne a vu sa valeur modifiée ?

      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        4 septembre 2019 à 9:03:01

        Benzouye a écrit:

        Bonjour,

        unchained77 a écrit:

        serait il possible de générer dynamiquement du code en faisant des CONCATs de IF ?

        pourquoi demander cela au SGBD ? En quoi est-ce le SGBD qui va utiliser l'information "telle colonne a sa valeur qui a été modifié" ? Dans quel contexte te retrouves-tu en besoin de savoir quelle colonne a vu sa valeur modifiée ?

        Dans le cadre d'un projet web je dois lancer une notif, celle ci doit afficher la liste des valeurs qui ont été modifiées par l'utilisateur à un instant T, celà permet de faire un suivis.

        si tu as une meilleure solution autre que les triggers je suis preneur.

        Merci pour vos réponses.

        • Partager sur Facebook
        • Partager sur Twitter
          4 septembre 2019 à 13:53:09

          unchained77 a écrit:

          je dois lancer une notif, celle ci doit afficher la liste des valeurs qui ont été modifiées par l'utilisateur à un instant T, celà permet de faire un suivis

          Je ne suis pas certain que de programmer cela côté BDD est pertinent ...

          Je pense qu'il serait moins gourmand (ou complexe) de le faire côté applicatif (PHP ?). Par exemple, lors de la validation du formulaire par l'utilisateur, de ne réhydrater l'objet mis à jour qu'après avoir comparé les valeurs de ses attributs avec les précédentes et ainsi stocker les données distinctes (en base ?) ... après ce n'est que mon avis ...

          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
            9 septembre 2019 à 10:48:20

            après un silence radio, j'ai du faire une procédure qui ira chercher avant l'update l'ancienne valeur, la comparé avec la nouvelle valeur et si elles sont différentes alors je concatene pour obtenir 

            a -> b

            c - > z

            etc...

            dès que l'update est terminé j'envois la notif comme quoi il y a eu modifications.

            tout fonctionne

            Merci :)

            -
            Edité par unchained77 9 septembre 2019 à 10:48:49

            • Partager sur Facebook
            • Partager sur Twitter

            [mysql] Trigger after update

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown