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
.
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.
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.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']);
}
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')
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');
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ć.
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`;
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
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