Znajdź i zamień tekst w całej tabeli za pomocą zapytania MySQL

Zwykle używam manual find, aby zastąpić tekst w bazie danych MySQL za pomocą phpmyadmin. Jestem tym zmęczony, jak mogę uruchomić zapytanie, aby znaleźć i zastąpić tekst nowym tekstem w całej tabeli w phpmyadmin?

Przykład: Znajdź słowo kluczowe domain.com, zamień na www.domain.com.

Author: guaka, 2012-08-07

8 answers

Dla single table aktualizacji

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

Od multiple tables -

Jeśli chcesz edytować ze wszystkich tabel, najlepszym sposobem jest pobranie dump, a następnie find/replace i przesłanie go z powrotem.

 469
Author: swapnesh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-07 04:45:43

Najprostszym sposobem, jaki znalazłem, jest zrzut bazy danych do pliku tekstowego, uruchomienie polecenia sed do zastąpienia i ponowne załadowanie bazy danych z powrotem do MySQL.

Wszystkie polecenia są bash na Linuksie, z pamięci.

Zrzut bazy danych do pliku tekstowego

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

Uruchom polecenie sed, aby znaleźć / zastąpić docelowy ciąg znaków

sed -i 's/oldString/newString/g' ./db.sql

Przeładuj bazę danych do MySQL

mysql -u user -p databasename < ./db.sql
Łatwizna.
 27
Author: siliconrockstar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-19 02:10:50

Umieść to w pliku php i uruchom go i powinien robić to, co chcesz.

// 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']);
}
 23
Author: Lee Woodman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-12 16:58:30

Uruchamianie zapytania SQL w PHPmyadmin, aby znaleźć i zastąpić tekst we wszystkich postach na blogu wordpress, takich jak znalezienie mysite.com/wordpress i zastąpienie go mysite.com/news Tabela w tym przykładzie to tj_posts

UPDATE `tj_posts`
SET `post_content` = replace(post_content, 'mysite.com/wordpress', 'mysite.com/news')
 20
Author: guest,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-19 02:44:03
 UPDATE table SET field = replace(field, text_needs_to_be_replaced, text_required);

Jak na przykład, jeśli chcę zastąpić wszystkie wystąpienia Jana przez Marka użyję poniżej,

UPDATE student SET student_name = replace(student_name, 'John', 'Mark');
 8
Author: Umesh Patil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-08 11:11:44

Inną opcją jest wygenerowanie poleceń dla każdej kolumny w bazie danych:

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_%';

Powinno to wygenerować listę poleceń update, które można następnie wykonać.

 6
Author: Farid.O,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-20 09:47:38

Uważam, że odpowiedź "swapnesh" jest najlepsza ! Niestety nie mogłem go uruchomić w phpMyAdmin (4.5.0.2), który choć nielogiczny (i próbował kilku rzeczy) ciągle powtarzał, że znaleziono nowe stwierdzenie i że nie znaleziono ogranicznika...

Dlatego przyszedłem z następującym rozwiązaniem, które może być przydatne, jeśli exeprience ten sam problem i nie mają innego dostępu do bazy danych niż 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`;

Aby przetestować oczekiwany wynik, możesz użyć :

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`;
 2
Author: llange,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-26 12:25:35

Generowanie zmian zapytań SQL (szybko)

Mysql-e "SELECT CONCAT( 'update', table_name, 'set', column_name, ' = replace (', column_name,', "www.oldsite.com", "www.newsite.com");') jako stwierdzenie z information_schema.kolumny gdzie table_name jak 'wp_% '" - u root-p your_db_name_here > upgrade_script.sql

Usuń wszelkie śmieci na początku pliku. Miałem trochę.

Nano upgrade_script.sql

Uruchom wygenerowany skrypt z opcjami -- force, aby pominąć błędy. (Wolno-weź kawę, jeśli Duże DB)

Mysql-u root-p your_db_name_here --force

 0
Author: Andy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-03 17:44:25