Buscar y reemplazar texto en toda la tabla usando una consulta MySQL
Normalmente uso búsqueda manual para reemplazar texto en una base de datos MySQL usando phpmyadmin. Estoy cansado de esto ahora, ¿cómo puedo ejecutar una consulta para encontrar y reemplazar un texto con texto nuevo en toda la tabla en phpmyadmin?
Ejemplo: buscar palabra clave domain.com
, reemplazar con www.domain.com
.
8 answers
Para una actualización single table
UPDATE `table_name`
SET `field_name` = replace(same_field_name, 'unwanted_text', 'wanted_text')
De multiple tables
-
Si desea editar desde todas las tablas, la mejor manera es tomar el dump
y luego find/replace
y subirlo de nuevo.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-08-07 04:45:43
La forma más fácil que he encontrado es volcar la base de datos a un archivo de texto, ejecutar un comando sed para hacer el reemplazo, y volver a cargar la base de datos en MySQL.
Todos los comandos son bash en Linux, de memoria.
Volcar la base de datos a un archivo de texto
mysqldump -u user -p databasename > ./db.sql
Ejecute el comando sed para buscar/reemplazar la cadena de destino
sed -i 's/oldString/newString/g' ./db.sql
Recargar la base de datos en MySQL
mysql -u user -p databasename < ./db.sql
Pan comido.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-19 02:10:50
Pon esto en un archivo php y ejecútalo y debería hacer lo que quieras que haga.
// 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 strings.
$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']);
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-12 16:58:30
Ejecutar una consulta SQL en phpMyAdmin para buscar y reemplazar texto en todas las publicaciones de blog de wordpress, como buscar mysite.com/wordpress y reemplazando eso con mysite.com/news La tabla en este ejemplo es tj_posts
UPDATE `tj_posts`
SET `post_content` = replace(post_content, 'mysite.com/wordpress', 'mysite.com/news')
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-19 02:44:03
UPDATE table SET field = replace(field, text_needs_to_be_replaced, text_required);
Como por ejemplo, si quiero reemplazar todas las apariciones de Juan por Marcos voy a utilizar a continuación,
UPDATE student SET student_name = replace(student_name, 'John', 'Mark');
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-08 11:11:44
Otra opción es generar las sentencias para cada columna en la base de datos:
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_%';
Esto debería generar una lista de instrucciones update que luego puede ejecutar.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-20 09:47:38
Creo que la respuesta de "swapnesh" es la mejor ! Desafortunadamente no pude ejecutarlo en phpMyAdmin (4.5.0.2) quien aunque ilógico (e intentó varias cosas) seguía diciendo que se encontró una nueva declaración y que no se encontró delimitador {
Así que vine con la siguiente solución que podría ser útil si exeprience el mismo problema y no tienen otro acceso a la base de datos 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`;
Para probar el resultado esperado puede usar:
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`;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-26 12:25:35
Generar consultas SQL de cambio (RÁPIDO)
Mysql-e " SELECT CONCAT ('update', table_name, 'set', column_name,' = replace (', column_name,', "www.oldsite.com", "www.newsite.com");') COMO declaración DE information_schema.columnas DONDE table_name COMO ' wp_%' " - u root-p su_db_name_here > upgrade_script.sql
Elimine cualquier elemento no deseado al inicio del archivo. Tomé un poco.
Nano upgrade_script.sql
Ejecute el script generado con las opciones force force para omitir errores. (LENTO-tomar un café si es grande DB)
Mysql-u root-p your_db_name_here force force
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-03 17:44:25