Le contenu d’un site web dans une base de donnée comme MySQL, c’est fort utile à plusieurs niveaux, par contre, quand vient le temps de rechercher des morceaux de texte et de les remplacer automatiquement par un autre partout dans le site web, c’est plus évident avec un bon vieux « Search & Replace » dans des pages html habituelles. Il n’y a pas longtemps, j’ai du faire une telle opération, sauf que, comme vous avez deviné, cette fois tout le contenu affecté se trouvait dans une base de donnée MySQL avec pour accès le logiciel phpMyAdmin.
À première vue, je m’étais résigné à l’idée de mettre le site en pause pour empêcher les gens de publier du nouveau contenu, télécharger dans un fichier texte toute la base de donnée, qui devait faire au moins 80 mo, effectuer les changements voulus avec un éditeur capable d’ouvrir un fichier texte de cette taille, effacer la base de donnée en-ligne pour finalement la re-télécharger sur le site et l’importer avec phpMyAdmin. Ce n’est pas une mince opération, et elle pourrait bien prendre un certain temps. Et ce, si tout va bien, si le téléchargement n’a pas eu de pépins, et si je n’ai rien oublié…
Je me suis dit, dans un environnement aussi sophistiqué qu’une BDD relationnelle, il doit bien y avoir une meilleure façon de procéder. On peut déjà faire des recherches de type expressions rationnelles (regular expressions, en anglais), pourquoi ne peut on pas rechercher et remplacer?
J’ai cherché, j’ai trouvé, je vous partage la petite ligne de texte magique qui vous fera épargner bien du temps. Toutefois, avant d’essayer, il me faut insister pour que vous fassiez une sauvegarde de vos données SQL, deux fois plutôt qu’une s’il le faut, car il est facile de tout casser avec ce genre d’opérations.
Accéder à phpMyAdmin, sélectionner la table où vous devez faire vos changements, et cliquez sur l’onglet SQL, qui vous présente une boîte de texte où vous pouvez insérer des commandes SQL directement.
On va se servir de la fonction MySQL Replace
:
UPDATE nom_table SET nom_rangee = replace(nom_rangee, "texte à trouver", "texte à remplacer");
Ou, dans un format phpMyAdmin avec ses guillemets en apostrophes inversés:
UPDATE `nom_table` SET `nom_rangee` = replace(`nom_rangee`, "texte à trouver", "texte à remplacer");
On peut même, si nécessaire, améliorer le degré de précision de notre recherche avec un argument de type WHERE
qui examine et compare une autre rangée:
UPDATE `nom_table` SET `nom_rangee` = replace(`nom_rangee`, "texte à trouver", "texte à remplacer") WHERE `nom_autre_rangee` = "XYZ";
Et si je veux remplacer toto par tota dans une multitude de champs et de tables ????
Thanks for sharing this, It is really helpful.