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

Fermé
traderpierre Messages postés 291 Date d'inscription mercredi 11 octobre 2006 Statut Membre Dernière intervention 6 janvier 2024 - Modifié le 3 juil. 2019 à 17:36
traderpierre Messages postés 291 Date d'inscription mercredi 11 octobre 2006 Statut Membre Dernière intervention 6 janvier 2024 - 4 juil. 2019 à 22:47
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

jee pee Messages postés 39632 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 24 avril 2024 9 234
Modifié le 3 juil. 2019 à 18:52
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
traderpierre Messages postés 291 Date d'inscription mercredi 11 octobre 2006 Statut Membre Dernière intervention 6 janvier 2024 6
3 juil. 2019 à 20:23
ça ne fonctionne pas,
MySQL a répondu : Documentation
#1054 - Champ 'ps_advice_lang.id_lang' inconnu dans field list
0
jee pee Messages postés 39632 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 24 avril 2024 9 234 > traderpierre Messages postés 291 Date d'inscription mercredi 11 octobre 2006 Statut Membre Dernière intervention 6 janvier 2024
3 juil. 2019 à 22:48
aucune idée, c'est une erreur basique, champ inconnu
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650 > traderpierre Messages postés 291 Date d'inscription mercredi 11 octobre 2006 Statut Membre Dernière intervention 6 janvier 2024
3 juil. 2019 à 23:12
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
jee pee Messages postés 39632 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 24 avril 2024 9 234 > jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024
3 juil. 2019 à 23:17
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
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650 > jee pee Messages postés 39632 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 24 avril 2024
3 juil. 2019 à 23:26
Uniquement pour les noms réservés et pour ceux qui auraient la mauvaise idée d'utiliser des accebts ou des espaces...
0