Upadter plusieurs tables en une seule requête SQL sous MyAdmin

traderpierre Messages postés 316 Statut Membre -  
traderpierre Messages postés 316 Statut Membre -
Bonjour,
je m' explique,
Dans ma base de données, j'ai plusieurs tables ayant chacune une colonne avec le même intitulé "id_lang",
Est-il possible d'updater les colonnes id_lang sur toutes ces tables en même temps, sachant que ces collonne ne sont pas liées entre elles,
J'avais essayé de mettre toutes les requêtes correspondant à chaque table dans la même requête mais ça ne fonctionne pas :
Voici mon code SQL :
UPDATE `ps_advice_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_attachment_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_attribute_group_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_attribute_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_badge_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_carrier_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_cart_rule_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_category_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_cms_category_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_cms_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_cms_role_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_configuration_kpi_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_configuration_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_contact_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_country_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_customization_field_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_feature_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_feature_value_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_gender_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_group_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_homeslider_slides_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_image_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_info_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_lang_shop` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_layered_indexable_attribute_group_lang_value` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_layered_indexable_attribute_lang_value` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_layered_indexable_feature_lang_value` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_layered_indexable_feature_value_lang_value` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_linksmenutop_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_link_block_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_manufacturer_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_meta_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_multihtmlblockbadeaude_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_multihtmlblockbadeaues_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_multihtmlblockbadeauit_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_multihtmlblockbadeauuk_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_multihtmlblockbandeaude_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_multihtmlblockbandeaues_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_multihtmlblockbandeaufr_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_multihtmlblockbandeauit_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_multihtmlblockbandeauuk_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_order_message_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_order_return_state_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_order_state_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_product_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_profile_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_quick_access_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_reassurance_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);
UPDATE `ps_risk_lang` SET `id_lang`= REPLACE(`id_lang`,7,8);

Si je teste sur une table individuelle ça fonctionne "une seule ligne ci dessus"

Est il possible de lancer toutes ces updates en une seule requête ???

Merci par avance

1 réponse

  1. jee pee Messages postés 31892 Date d'inscription   Statut Modérateur Dernière intervention   9 984
     
    Bonjour,

    Peut être un

    UPDATE `ps_advice_lang` , `ps_attachment_lang`, ... , `ps_risk_lang` 
    SET `ps_advice_lang.id_lang`= REPLACE(`ps_advice_lang.id_lang`,7,8),
        `ps_attachment_lang.id_lang`= REPLACE(`ps_attachment_lang.id_lang`,7,8),
    ...
       `ps_risk_lang.id_lang`= REPLACE(`ps_risk_lang.id_lang`,7,8)
    

    voir : https://dev.mysql.com/doc/refman/8.0/en/update.html

    Avec Oracle, je ferais une procédure PL/SQL qui interrogerait le dictionnaire de données pour trouver toutes les tables ayant le champ id_lang, et qui génèrerait un update dynamique avec les tables trouvées.

    Cdlt
    0
    1. traderpierre Messages postés 316 Statut Membre 7
       
      ça ne fonctionne pas,
      MySQL a répondu : Documentation
      #1054 - Champ 'ps_advice_lang.id_lang' inconnu dans field list
      0
    2. jee pee Messages postés 31892 Date d'inscription   Statut Modérateur Dernière intervention   9 984 > traderpierre Messages postés 316 Statut Membre
       
      aucune idée, c'est une erreur basique, champ inconnu
      0
    3. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832 > traderpierre Messages postés 316 Statut Membre
       
      Bonjour,
      Le message est du au fait que les backquotes se mettent autour de chaque "objet" (nom de table, nom de champ...) et pas sur un "ensemble"
      Par exemple
      `ps_advice_lang.id_lang`
      

      est à remplace par :
      `ps_advice_lang`.`id_lang`
      
      0
    4. jee pee Messages postés 31892 Date d'inscription   Statut Modérateur Dernière intervention   9 984 > jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention  
       
      merci, c'est de ma faute, j'avais rajouté le nom de table devant le champ à partir de l'exemple de la question. D'ailleurs en mysql, c'est nécessaire/indispensable ces backquotes ?
      0
    5. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832 > jee pee Messages postés 31892 Date d'inscription   Statut Modérateur Dernière intervention  
       
      Uniquement pour les noms réservés et pour ceux qui auraient la mauvaise idée d'utiliser des accebts ou des espaces...
      0