Partage
  • Partager sur Facebook
  • Partager sur Twitter

Update sur plusieurs tables

Sujet résolu
    1 décembre 2020 à 22:36:38

    Bonjour,

    Je compte sur vos connaissances pour pouvoir m'aider sur un problème, où je n'ai pas trouvé encore de solutions.

    Sans rentrer dans les détails, l'application sur laquelle je travaille permet à des utilisateurs de créer plusieurs fiches (liées a leurs formations, expériences personnelles etc..)

    Je travaille sur une bdd où ces fiches sont stockées sur plusieurs tables:

    La table FAR, qui contient toutes les fiches:

    # Field, Type, Null, Key, Default, Extra
    ID_FAR, bigint(20), NO, PRI, , auto_increment
    ID_FICHE, bigint(20), YES, NULL, ,
    TYPE, varchar(255), NO, , ,
    CODE, varchar(64), YES, , ,
    LANGUE, varchar(4), YES, , ,
    ETAT_OBJET, varchar(4), YES, , ,
    TITRE, text, YES, , ,
    CODE_REDACTEUR, varchar(64), YES, NULL, ,

    Puis il existe une table par type, par exemple: FARCV, FAREXPERIENCEPERSO, etc.. il y a environ 20 tables comme celle là. Leurs structures sont quasi identiques. Ce qui change, c'est le nom de l'ID, par exemple sur la table FARCV, la colonne id va s'appeler ID_FARCV, sur la table FARMAF, ce sera ID_FARMAF, etc.. (j'espère que vous me suivez jusque là!). Ces tables stockent le contenu des fiches contrairement à la table FAR.

    # Field, Type, Null, Key, Default, Extra
    ID_FARMAF, bigint(20), NO, PRI, , auto_increment
    TITRE, varchar(255), YES, , ,
    DOMAINE, varchar(255), YES, , ,
    SPECIALITE, varchar(255), YES, , ,
    ETABLISSEMENT, varchar(255), YES, , ,
    DATE_OBTENTION, date, YES, , 1970-01-01,
    OBJECTIFS, text, YES, , ,
    NIVEAU, text, YES, , ,
    INTERETS, text, YES, , ,
    LACUNES, text, YES, , ,
    POINTS_FAIBLES, text, YES, , ,  ,
    CODE, varchar(64), YES, MUL, ,
    CODE_RUBRIQUE, varchar(255), YES, NULL, ,
    CODE_RATTACHEMENT, varchar(64), YES, MUL, ,
    META_KEYWORDS, text, YES, , ,
    META_DESCRIPTION, text, YES, , ,
    TITRE_ENCADRE, varchar(32), YES, , ,
    CONTENU_ENCADRE, text, YES, , ,
    DATE_CREATION, datetime, YES, , 1970-01-01 00:00:00,
    DATE_PROPOSITION, datetime, YES, , 1970-01-01 00:00:00,
    DATE_VALIDATION, datetime, YES, , 1970-01-01 00:00:00,
    DATE_MODIFICATION, datetime, YES, , 1970-01-01 00:00:00,
    CODE_REDACTEUR, varchar(64), YES, NULL, ,
    CODE_VALIDATION, varchar(64), YES, NULL, ,

    La colonne ID_FICHE de la Table FAR correspond à l'id des tables FAR****

    Mon problème est le suivant:

    Chaque table qui commencent par FAR (au moins 20 tables comme cités précédemment) contiennent la colonne CODE_REDACTEUR

    J'aimerais modifier ce champs dans toutes ces tables différentes, mais seulement les fiches qui ont la colonne CODE_REDACTEUR='blob'.

    Par exemple j'aimerais mettre CODE_REDACTEUR='test', là ou la colonne CODE_REDACTEUR='blob'.

    Voilà seulement j'ignore comment. Chaque table à un id différent (ID_FARCV, ID_FARMAF, ID_FARJOB..) malgré que le reste de la structure soit identique. J'ignore même comment sélectionner les fiches de toutes les tables dont la colonne CODE_REDACTEUR='blob'. Mais mon but est de les modifier.

    Est ce que quelqu'un a assez de connaissances pour m'aider ?

    Merci d'avance,

    A.


    • Partager sur Facebook
    • Partager sur Twitter
      2 décembre 2020 à 9:27:23

      Bonjour,

      Je ne suis pas sûr de comprendre ...

      Si tu veux mettre à jour tes X tables, il faut faire X requête UPDATE ...

      UPDATE FARXXXX
      SET CODE_REDACTEUR = 'blob'
      WHERE CODE_REDACTEUR = 'test';

      En remplaçant XXXX par le nom réel de la table.

      Sinon, il faut essayer de mieux expliquer ton besoin ...

      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        2 décembre 2020 à 10:45:11

        Bonjour, merci pour ta réponse! Pour être plus précise, j'aimerais modifier la colonne CODE_REDACTEUR de chaque table commençant par FAR**. Sachant que ces tables ont une structure identiques mis a part la colonne ID dont le nom varie selon le nom de la table.

        J'espère que c'est un peu plus compréhensible?

        -
        Edité par Benzouye 2 décembre 2020 à 20:58:58

        • Partager sur Facebook
        • Partager sur Twitter
          2 décembre 2020 à 12:00:09

          Cela ne change rien à ma réponse ...

          Dans tous les cas il faudra faire un UPDATE par table à traiter.

          Tu peux par contre automatiser ce traitement.

          Avec MySQL, ce peut être en cherchant la liste des tables nommées "FAR%" :

          SHOW TABLES
          LIKE 'FAR%';

          Cela va te retourner la liste des nom de table commençant par FAR.

          Ensuite, tu fais une boucle sur ce résultat pour faire un UPDATE pour chaque table retournée.

          Soit côté MySQL avec une procédure stockée et un curseur.

          Soit avec un programme tiers, par exemple avec PHP :

          <?php
          	$bdd = new PDO( ... );
          	
          	$requete = $bdd->query( 'SHOW TABLES LIKE "FAR%";' );
          	$tables = $requete->fetchAll();
          	
          	var_dump( $tables );
          	
          	foreach( $tables as $table ) {
          		$sql = "
          			UPDATE $table[0]
          			SET CODE_REDACTEUR = 'blob'
          			WHERE CODE_REDACTEUR = 'test';";
          		var_dump( $sql );
          		$bdd->query( $sql );
          	}
          ?>
          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
            2 décembre 2020 à 20:03:46

            Merci beaucoup Benzouve pour ta réponse. En effet il serait plus simple d'automatiser tout ça. Merci de m'avoir aidée!

            -
            Edité par Benzouye 2 décembre 2020 à 20:58:31

            • Partager sur Facebook
            • Partager sur Twitter

            Update sur plusieurs tables

            × 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