สิ่งที่แบบสอบถาม SQL จะทำง่ายค้นหาและแทนที่


20

เมื่อใดก็ตามที่ฉันสร้างเว็บไซต์ใหม่ฉันจะสร้างเว็บไซต์การแสดงละครบนโดเมนย่อยเช่น "stage.domain-name.com"

หลังจากทุกอย่างทำงานถูกต้องฉันส่งออกฐานข้อมูลเปิดใน notepad ++ และทำการค้นหา / แทนที่สำหรับ "subdomain.domain-name.com" และแทนที่ด้วย "domain-name.com" ... ในที่สุดฉันก็นำเข้าสู่ใหม่ ฐานข้อมูลสำหรับเว็บไซต์สด

คำถามของฉันคือ ... แบบสอบถาม SQL ใดที่ฉันจำเป็นต้องเรียกใช้ถ้าฉันต้องการค้นหา / แทนที่แบบง่าย ๆ บนฐานข้อมูลทั้งหมดโดยใช้ phpmyadmin

-CH


หากคุณไม่คุ้นเคยกับข้อความค้นหาให้ลองใช้ปลั๊กอินค้นหาและแทนที่wordpress.org/extend/plugins/search-and-replace
t31os

ทำไมไม่ใช้ฟังก์ชั่น WordPress เพื่ออัปเดต URL? codex.wordpress.org/Moving_WordPress ให้รายละเอียดทุกอย่าง
Alex เก่า

มีปลั๊กอินสำหรับสิ่งนี้ อนุญาตให้ใช้แบ็กเอนด์อย่างสะดวกสบายและแทนที่ URL ในโพสต์เนื้อหาและฟิลด์อื่น ๆ หากคุณต้องการ: wordpress.org/plugins/better-search-replace
simonthesorcerer

คำตอบ:


13

ตารางที่บันทึก URL ของคุณคือ wp_options คุณควรทำการอัปเดตในคอลัมน์ที่ใช้ URL สำหรับเว็บไซต์ของคุณ:

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"

ฉันอาจหายไปบางค่า แต่เมื่อใดก็ตามที่คุณทำกระบวนการค้นหา / แทนที่อีกครั้งคุณสามารถสังเกตเห็นค่าและตารางที่ควรได้รับการปรับปรุงและเพิ่มลงในสคริปต์นี้

WordPress Codex มีคำแนะนำที่ดีเกี่ยวกับวิธีการเปลี่ยน URL ไซต์บางทีนั่นอาจเป็นเรื่องง่ายสำหรับคุณ: การเปลี่ยน URL ของไซต์


1
ไม่มีวิธีในการค้นหา / แทนที่ในฐานข้อมูลทั้งหมดหรือไม่ ในคำอื่น ๆ ... ฉันสังเกตเห็นตัวอย่างที่ฉันต้องการแทนที่ URL ในสถานที่ต่าง ๆ รวมทั้งห้องสมุดสื่อ .... หากมีการค้นหา / แทนที่สำหรับฐานข้อมูลทั้งหมดเป็นหลักสำหรับทุกฟิลด์แล้วนี้จะแก้ปัญหา ปัญหา. ขอบคุณสำหรับความช่วยเหลือของคุณ
NetConstructor.com

ลองดูลิงค์ใหม่ที่ฉันเพิ่มเข้าไปในคำตอบ ฉันคิดว่าจะเป็นวิธีที่จะไป
Fernando Briano

1
สิ่งนี้จะไม่ทำงานสำหรับข้อมูลที่ต่อเนื่องกัน มันอาจทำลายการกำหนดค่าธีมบางอย่างโดยสิ้นเชิง
Christian Lescuyer

29

ตัวเลือกที่ดีที่สุดที่จะทำโพสต์เนื้อหาโพสต์และโพสต์เมตา:

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');

ดูการค้นหาข้อมูลโดยใช้ phpMyAdmin และ MySQL | Packt Publishing และSearch RegExเป็นปลั๊กอิน WP ที่ดีที่สามารถค้นหาและแทนที่ด้วย Grep ผ่านการโพสต์และหน้าทั้งหมด

Update 6/16/2015:การใช้เครื่องมือที่เชื่อมโยงในประโยคถัดไปนั้นดีกว่ามากเนื่องจากการค้นหา / แทนที่อย่างง่าย ๆ ดังกล่าวข้างต้นในการถ่ายโอนข้อมูลฐานข้อมูลจะทำให้ข้อมูลแบบอนุกรมเสียหาย ดูinterconnectit.com WordPress เป็นเครื่องมือค้นหาแทนที่ PHP อนุกรม ด้วยวิธีนี้คุณจะไม่ทำลายข้อมูลต่อเนื่องและไม่จำเป็นต้องเรียกใช้ RegEx ในเนื้อหาโพสต์เนื่องจากสคริปต์เชื่อมต่อระหว่างกันจะเปลี่ยน URL ทุกที่ ฉันใช้เครื่องมือนั้นตลอดเวลาเพื่อโยกย้ายไซต์ไปยังโดเมนอื่นหรือทำการเปลี่ยนแปลงระดับโลกจาก http เป็น https เพื่อบังคับ SSL โดยไม่ต้องใช้ปลั๊กอินและเปลี่ยน URL ทั้งหมดในเนื้อหาเพื่อป้องกันข้อผิดพลาดองค์ประกอบที่ไม่ปลอดภัย


2
ไม่เคยเปลี่ยน guid - แม้ว่าจะเป็นโดเมนใหม่ มันใช้ในการโพสต์ ID ที่ไม่ซ้ำกันในขณะที่ ID สามารถเปลี่ยนแปลงได้หากโพสต์นั้นถูกส่งออก / นำเข้าสู่ฐานข้อมูลใหม่ สิ่งหนึ่งที่ผู้อ่าน RSS จะใช้ GUID เพื่อบอกว่ามีการอ่านบทความใดบทความหนึ่งหรือไม่ การเปลี่ยน guid จะเป็นการเผยแพร่บทความทั้งหมดของคุณอย่างมีประสิทธิภาพ
เทย์เลอร์ดิวอี้

@taylordewey พูดว่า: "อย่าเปลี่ยน guid ... " ขยะ
markratledge

1
@songdogtech สนใจที่จะอธิบายว่าทำไมมันถึงมีขยะ?
shea

1
ทำไมต้องเปลี่ยน GUID
ไกเซอร์

1
สิ่งนี้จะไม่ทำงานสำหรับข้อมูลที่ต่อเนื่องกัน มันอาจทำลายการกำหนดค่าธีมบางอย่างโดยสิ้นเชิง ใช้เครื่องมืออย่างเช่น Interconnect / IT
Christian Lescuyer

9

นี่เป็นสคริปต์ดร็อปอินที่ยอดเยี่ยมที่ฉันใช้และทำงานได้อย่างสวยงามด้วยอาร์เรย์ที่ต่อเนื่องซึ่ง WP ใช้เพื่อจัดเก็บตัวเลือก เพียงตรวจสอบให้แน่ใจว่าได้ลบออกจากเซิร์ฟเวอร์ระยะไกลของคุณเมื่อคุณทำเสร็จเพราะมีความเสี่ยงด้านความปลอดภัยจำนวนมาก

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


2
ฉันไม่รู้ว่าทำไมฉันถึงได้ -1 สคริปต์นี้ดีกว่าคำสั่ง SQL ข้อเสนอแนะโปรด?
lancemonotone

1
เครื่องมือที่คนที่ไม่รู้จัก sql สามารถใช้กำลังทำให้ผู้ที่เขียน sql เป็นทุกข์
Jon

4

สำหรับเรื่องนี้ฉันใช้WP-CLIเพราะฉันพบว่ามันง่ายที่สุดและดูแลข้อมูลต่อเนื่อง

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

นอกจากนี้ยังมีตัวเลือกที่เขียนการเปลี่ยนแปลงของคุณลงในไฟล์ SQL แทนที่จะจัดการกับฐานข้อมูลจริง:

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


โดยไกลทางออกที่แข็งแกร่งและเร็วที่สุด wp-cli บันทึกวันนี้อีกครั้ง
ryanrain

3

คุณไม่ต้องทำสิ่งนี้คุณสามารถใช้เส้นทางสัมพัทธ์

เมื่อคุณเชื่อมโยงบางสิ่งบางอย่างแทน subdomain.soemthing.com/image.jpg - ใช้ /image.jpg เช่น

แบบนี้คุณจะไม่เจอปัญหาในตอนแรก

มิฉะนั้นสำหรับคำสั่งการอัพเดท mysql ที่คุณสามารถใช้ได้

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

ขอบคุณ ... ใช่ฉันจะทำเช่นนั้นในครั้งต่อไป คำสั่ง SQL ทำการค้นหาแทนที่บนฐานข้อมูลทั้งหมด (รวมถึงตารางทั้งหมด)?
NetConstructor.com

@ NetConstructor.com คำสั่ง SQL mireille ที่ให้ไว้ข้างต้นคือคำสั่ง MySQL ทั่วไปสำหรับการแทนที่สตริงในฟิลด์ที่ระบุในตารางที่ระบุ หากคุณลองใช้คำสั่งนี้ตามที่เขียนจริงมันจะไม่ทำงาน เพื่อให้คำสั่งนี้ใช้งานได้คุณจะต้องเปลี่ยน TABLE_NAME & FIELD_NAME เป็นฟิลด์จริงและตารางที่ใช้โดย WordPress
Manzabar

โปรดทราบว่าแม้ว่าคุณต้องการใช้เส้นทางสัมพัทธ์ แต่ส่วนต่าง ๆ ของ wordpress มีแนวโน้มที่จะแทรกเส้นทางแบบเต็มโดยอัตโนมัติ ในการทำให้ปลั๊กอินใช้งานได้ดีเช่นนี้: wordpress.org/plugins/root-relative-urlsมีประโยชน์มาก ๆ มาก
benz001

2

ในการเปลี่ยนโดเมน wordpress ที่เราต้องการบ่อยครั้งอาจจะทำให้เว็บไซต์นั้นอยู่ใน localhost: นี่คือรายการแบบสอบถามที่สมบูรณ์:

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');
  • เราต้องเพิ่มตารางอื่น ๆ ที่ไม่ใช่ค่าเริ่มต้นด้วย WP หากจำเป็น

อัปเดต: Search Replace DBเวอร์ชั่น 3.1.0 เป็นเครื่องมือที่ใช้งานง่ายสำหรับนักพัฒนาซึ่งช่วยให้คุณสามารถดำเนินการค้นหา / แทนที่ฐานข้อมูลได้อย่างกว้างขวางซึ่งจะไม่ทำลายสตริงหรือวัตถุที่ต่อเนื่องของ PHP


2
สิ่งนี้จะไม่ทำงานสำหรับข้อมูลที่ต่อเนื่องกัน มันอาจทำลายการกำหนดค่าธีมอย่างสมบูรณ์
Christian Lescuyer

-1

ที่จริงแล้วคุณไม่จำเป็นต้องใช้แบบสอบถาม SQL เพียงแค่ปรับเปลี่ยนบางอย่างในไฟล์ wp_config และ functions.php ในธีมของคุณ ลองดูหัวข้อนี้ใน Wordpress Codex: https://codex.wordpress.org/Changing_The_Site_URL


1
สิ่งนี้ไม่ถูกต้อง WordPress โชคไม่ดีที่เก็บ URL ไว้ในฐานข้อมูลเป็นข้อความ
s_ha_dum
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.