Jakie zapytanie SQL zrobić proste znaleźć i zamienić


20

Ilekroć tworzę nową stronę internetową, najpierw tworzę stronę pośrednią w subdomenie, np. „Stage.domain-name.com”.

Po tym, jak wszystko działa poprawnie, eksportuję bazę danych, otwieram ją w Notatniku ++ i szukam / zamieniam dla „subdomain.domain-name.com” i zastępuję ją „domain-name.com” ... w końcu importuję ją do nowej baza danych dla strony na żywo.

Moje pytanie brzmi ... jakie zapytanie SQL musiałbym uruchomić, gdybym chciał wykonać proste wyszukiwanie / zamianę w całej bazie danych przy użyciu phpmyadmin?

-CH


Jeśli nie znasz zapytań, wypróbuj wtyczkę Wyszukaj i zamień, wordpress.org/extend/plugins/search-and-replace
t31os

Dlaczego nie wykorzystać funkcji WordPress do aktualizacji adresu URL? codex.wordpress.org/Moving_WordPress szczegółowo wszystko
Alex Older

Jest do tego wtyczka. Umożliwia wygodne korzystanie z backendu, a także zastępuje adres URL w post-content i niektórych innych polach, jeśli chcesz: wordpress.org/plugins/better-search-replace
simonthesorcerer

Odpowiedzi:


13

Tabela, w której zapisany jest twój adres URL, to wp_options. Powinieneś zaktualizować kolumny, które używają adresu URL Twojej witryny:

UPDATE TABLE wp_options SET option_value = "new domain" WHERE option_name = "siteurl"
UPDATE TABLE wp_options SET option_value = "new domain" WHERE option_name = "home"

Być może brakuje mi pewnej wartości, ale za każdym razem, gdy wykonasz ten proces znajdowania / zastępowania, możesz zauważyć wartości i tabele, które powinny zostać zaktualizowane, i dodać je do tego skryptu.

Kodeks WordPress ma fajny przewodnik na temat zmiany adresu URL witryny, być może jest to dla Ciebie jeszcze wygodniejsze: Zmiana adresu URL witryny


1
czy nie ma sposobu na znalezienie / zastąpienie całej bazy danych? Innymi słowy ... Zauważyłem na przykład, że muszę zastąpić adresy URL w wielu różnych lokalizacjach, w tym w bibliotece multimediów .... Gdyby istniało wyszukiwanie / zamiana dla całej bazy danych zasadniczo dla każdego pola, to by to rozwiązało problem. Dziękuję za pomoc
NetConstructor.com

Sprawdź ten nowy link dodany do odpowiedzi. Myślę, że taka byłaby droga.
Fernando Briano,

1
To nie zadziała w przypadku danych zserializowanych. Może to całkowicie zepsuć niektóre ustawienia motywu.
Christian Lescuyer

29

Najlepsze opcje, posty, treści i meta postów:

UPDATE wp_options SET option_value = replace(option_value, 'http://olddomain.com', 'http://newdomain.com') WHERE option_name = 'home' OR option_name = 'siteurl';

UPDATE wp_posts SET guid = replace(guid, 'http://olddomain.com','http://newdomain.com');

UPDATE wp_posts SET post_content = replace(post_content, 'http://olddomain.com', 'http://newdomain.com');

UPDATE wp_postmeta SET meta_value = replace(meta_value, 'http://olddomain.com', 'http://newdomain.com');

Zobacz także Wyszukiwanie danych przy użyciu phpMyAdmin i MySQL | Packt Publishing. I wyszukiwanie RegEx jest dobrym plugin WP, aby móc wyszukiwać i zastępować z Grep przez wszystkich stanowisk i stron.

Aktualizacja 16.06.2015: Korzystanie z narzędzia połączonego w następnym zdaniu jest znacznie lepsze, ponieważ proste wyszukiwanie / zamiana, jak wyżej w zrzucie bazy danych, spowoduje uszkodzenie serializowanych danych. Zobacz interconnectit.com WordPress Serialized PHP Search Replace Tool. W ten sposób nie łamiesz danych zserializowanych i nie będziesz musiał uruchamiać RegEx na treści postu, ponieważ skrypt interconnect wszędzie zmienia adresy URL. Używam tego narzędzia przez cały czas do migracji stron do różnych domen lub po prostu dokonuję globalnej zmiany z http na https, aby wymusić SSL bez wtyczek i zmieniać wszystkie adresy URL w treści, aby zapobiec błędom elementu niepewnego.


2
Nigdy nie zmieniaj przewodnika - nawet jeśli przejdziesz do nowej domeny. Służy do jednoznacznego identyfikowania postu, ponieważ identyfikator może się zmienić, jeśli posty są eksportowane / importowane do nowej bazy danych. Po pierwsze, czytniki RSS będą używać GUID, aby stwierdzić, czy dany artykuł został przeczytany, czy nie. Zmiana przewodnika skutecznie ponownie opublikuje wszystkie artykuły.
Taylor Dewey,

@taylordewey powiedział: „Nigdy nie zmieniaj przewodnika ...” Śmieci.
markratledge

1
@songdogtech Opieka, aby wyjaśnić, dlaczego to śmieci?
shea

1
Dlaczego trzeba zmienić GUID?
kaiser

1
To nie zadziała w przypadku danych zserializowanych. Może to całkowicie zepsuć niektóre ustawienia motywu. Rzeczywiście użyj narzędzia takiego jak Interconnect / IT.
Christian Lescuyer

9

Jest to świetny skrypt rozwijany, którego używam i działa pięknie z szeregowymi tablicami używanymi przez WP do przechowywania opcji. Pamiętaj, aby po zakończeniu usunąć go ze zdalnego serwera, ponieważ jest to OGROMNE zagrożenie bezpieczeństwa.

https://interconnectit.com/products/search-and-replace-for-wordpress-databases/


2
Nie wiem, dlaczego miałem -1. Ten skrypt jest znacznie lepszy niż instrukcja SQL. Proszę o opinię?
lancemonotone

1
narzędzie, którego nie znają sql, jest denerwujące dla tych, którzy piszą w sql
Jon

4

Do tego używam WP-CLI, ponieważ uważam to za najłatwiejsze i zajmuje się serializowanymi danymi.

wp search-replace 'http://example.dev' 'http://example.com' --skip-columns=guid

Istnieje również opcja zapisywania zmian w pliku SQL zamiast manipulowania rzeczywistą bazą danych:

wp search-replace foo bar --export=database.sql


zdecydowanie najbardziej niezawodne i najszybsze rozwiązanie. wp-cli po raz kolejny ratuje dzień
ryanrain

3

nie musisz tego robić, możesz użyć ścieżek względnych.

gdy łączysz coś zamiast subdomeny.soemthing.com/image.jpg - użyj na przykład /image.jpg

w ten sposób nie napotkasz problemu.

w przeciwnym razie możesz użyć instrukcji aktualizacji mysql

update TABLE_NAME set FIELD_NAME = replace(FIELD_NAME, find this string’, replace found string with this string’);

Dzięki ... tak, zrobię to następnym razem. Instrukcja SQL zastępuje znajdowanie w całej bazie danych (w tym we wszystkich tabelach)?
NetConstructor.com,

@ NetConstructor.com Mireille instrukcji SQL podane powyżej to ogólna komenda MySQL służąca do zamiany łańcucha w określonym polu w określonej tabeli. Jeśli spróbujesz uruchomić to oświadczenie dokładnie tak, jak zostało napisane, nie zadziała. Aby to polecenie działało, musisz zmienić TABLE_NAME i FIELD_NAME na prawdziwe pole i tabelę używane przez WordPress.
Manzabar,

Zauważ też, że nawet jeśli chcesz używać ścieżek względnych, wiele części wordpress ma tendencję do automatycznego wstawiania pełnych ścieżek. Aby naprawdę działało, wtyczka taka jak: wordpress.org/plugins/root-relative-urls jest bardzo, bardzo pomocna
benz001

2

Aby zmienić domenę wordpress, czego często potrzebujemy, może być uruchomienie witryny z hosta lokalnego: To jest pełna lista zapytań o aktualizację:

UPDATE wp_posts SET guid = replace(guid, 'http://olddomain.com','http://newdomain.com');
UPDATE wp_posts SET post_content = replace(post_content, 'http://olddomain.com', 'http://newdomain.com');
UPDATE wp_links SET link_url = replace(link_url, 'http://olddomain.com', 'http://newdomain.com');
UPDATE wp_links SET link_image = replace(link_image, 'http://olddomain.com', 'http://newdomain.com');
UPDATE wp_postmeta SET meta_value = replace(meta_value, 'http://olddomain.com', 'http://newdomain.com');
UPDATE wp_usermeta SET meta_value = replace(meta_value, 'http://olddomain.com', 'http://newdomain.com');

/*UPDATE wp_options SET option_value = replace(option_value, 'http://olddomain.com', 'http://newdomain.com') WHERE option_name = 'home' OR option_name = 'siteurl' OR option_name = 'widget_text' OR option_name = 'dashboard_widget_options';*/
UPDATE wp_options SET option_value = replace(option_value, 'http://olddomain.com', 'http://newdomain.com');
  • W razie potrzeby musimy również dodać inne tabele, które nie są domyślne w WP.

AKTUALIZACJA: Search Replace DB wersja 3.1.0 jest przyjaznym dla użytkownika, front-endowym narzędziem dla programistów, które pozwala na wykonywanie operacji wyszukiwania / zamiany w całej bazie danych, które nie uszkadzają szeregowanych w PHP ciągów ani obiektów.


2
To nie zadziała w przypadku danych zserializowanych. Może to całkowicie zepsuć konfigurację motywu.
Christian Lescuyer

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.