Rechercher et remplacer du texte dans la table entière à l’aide d’une requête MySQL

Généralement, j’utilise la recherche manuelle pour remplacer le texte dans une firebase database MySQL en utilisant phpmyadmin. J’en ai assez maintenant, comment puis-je lancer une requête pour trouver et remplacer un texte avec du nouveau texte dans la table entière dans phpmyadmin?

Exemple: recherchez le mot clé domain.com , remplacez-le par www.domain.com .

Pour une mise à jour d’une single table

  UPDATE `table_name` SET `field_name` = replace(same_field_name, 'unwanted_text', 'wanted_text') 

De multiple tables

Si vous souhaitez éditer à partir de toutes les tables, le meilleur moyen est de récupérer le dump , puis de le find/replace et de le télécharger.

Le moyen le plus simple que j’ai trouvé est de transférer la firebase database dans un fichier texte, d’exécuter une commande sed pour effectuer le remplacement et de recharger la firebase database dans MySQL.

Toutes les commandes sont bash sous Linux, de la mémoire.

Vider la firebase database dans un fichier texte

 mysqldump -u user -p databasename > ./db.sql 

Exécuter la commande sed pour rechercher / remplacer la chaîne cible

 sed -i 's/oldSsortingng/newSsortingng/g' ./db.sql 

Recharger la firebase database dans MySQL

 mysql -u user -p databasename < ./db.sql 

Peasy facile.

Mettez ceci dans un fichier php et lancez-le et il devrait faire ce que vous voulez qu’il fasse.

 // Connect to your MySQL database. $hostname = "localhost"; $username = "db_username"; $password = "db_password"; $database = "db_name"; mysql_connect($hostname, $username, $password); // The find and replace ssortingngs. $find = "find_this_text"; $replace = "replace_with_this_text"; $loop = mysql_query(" SELECT concat('UPDATE ',table_schema,'.',table_name, ' SET ',column_name, '=replace(',column_name,', ''{$find}'', ''{$replace}'');') AS s FROM information_schema.columns WHERE table_schema = '{$database}'") or die ('Cant loop through dbfields: ' . mysql_error()); while ($query = mysql_fetch_assoc($loop)) { mysql_query($query['s']); } 

Exécuter une requête SQL dans PHPmyadmin pour rechercher et remplacer du texte dans tous les articles de blog wordpress, comme trouver mysite.com/wordpress et le remplacer par mysite.com/news La table dans cet exemple est tj_posts

 UPDATE `tj_posts` SET `post_content` = replace(post_content, 'mysite.com/wordpress', 'mysite.com/news') 
  UPDATE table SET field = replace(field, text_needs_to_be_replaced, text_required); 

Comme par exemple, si je veux remplacer toutes les occurrences de John par Mark, j’utiliserai ci-dessous,

 UPDATE student SET student_name = replace(student_name, 'John', 'Mark'); 

Une autre option consiste à générer les instructions pour chaque colonne de la firebase database:

 SELECT CONCAT( 'update ', table_name , ' set ', column_name, ' = replace(', column_name,', ''www.oldDomain.com'', ''www.newDomain.com'');' ) AS statement FROM information_schema.columns WHERE table_schema = 'mySchema' AND table_name LIKE 'yourPrefix_%'; 

Cela devrait générer une liste d’instructions de mise à jour que vous pouvez ensuite exécuter.

Je crois que “swapnesh” répond pour être le meilleur! Malheureusement, je n’ai pas pu l’exécuter dans phpMyAdmin (4.5.0.2) qui, bien qu’illogique (et a essayé plusieurs choses), a continué à dire qu’une nouvelle déclaration avait été trouvée et qu’aucun délimiteur n’avait été trouvé…

Je suis donc venu avec la solution suivante qui pourrait être utile si vous utilisez le même problème et n’avez pas d’autre access à la firebase database que PMA…

 UPDATE `wp_posts` AS `toUpdate`, (SELECT `ID`,REPLACE(`guid`,'http://old.tld','http://new.tld') AS `guid` FROM `wp_posts` WHERE `guid` LIKE 'http://old.tld%') AS `updated` SET `toUpdate`.`guid`=`updated`.`guid` WHERE `toUpdate`.`ID`=`updated`.`ID`; 

Pour tester le résultat attendu, vous pouvez utiliser:

 SELECT `toUpdate`.`guid` AS `old guid`,`updated`.`guid` AS `new guid` FROM `wp_posts` AS `toUpdate`, (SELECT `ID`,REPLACE(`guid`,'http://old.tld','http://new.tld') AS `guid` FROM `wp_posts` WHERE `guid` LIKE 'http://old.tld%') AS `updated` WHERE `toUpdate`.`ID`=`updated`.`ID`; 

Générer des requêtes SQL modifiées (FAST)

mysql -e “SELECT CONCAT (‘update’, nom_table, ‘set’, nom_colonne, ‘= replace (‘, nom_colonne ‘,’ ‘www.oldsite.com’ ‘,’ ‘www.newsite.com’ ‘); ‘) Instruction AS FROM information_schema.columns WHERE nom_table LIKE’ wp_% ‘”-u root -p votre_nom_base_here> upgrade_script.sql

Supprimez toutes les ordures au début du fichier. J’en ai eu

nano upgrade_script.sql

Exécutez le script généré avec les options –force pour ignorer les erreurs. (SLOW – prenez un café si gros DB)

mysql -u root -p your_db_name_here –force