user
  • 0
Гуру

MySQL: можно заменить все wp_posts.Post_content(id#) с помощью UPDATE + REPLACE + SELECT?

  • 0

EDIT: я хочу обновить одно поле (post_content) в известной записи (id 4) известной таблицы (wp_posts) в новой базе данных (new_db). Обновление должно происходить из одного поля (post_content) в известной записи (id 5) известной таблицы (wp_posts) в старой базе данных (old_db). Возможно ли это, или что-то подобное слишком атомарно (?) для MySQL?

Привет! При прямом манипулировании базой данных WordPress я видел много примеров, когда люди заменяли URL-адрес таким образом;

mysql> UPDATE wp_db.wp_post SET post_content=REPLACE(post_content, 'http://oldsite', 'http://newsite' ) ;

Однако у меня есть файл дампа.sql с моего старого сайта, который я хочу правильно импортировать. (Я не могу создать файл экспорта XML, уже слишком поздно) Я создал «фиктивные» сообщения в своем новом блоге и импортировал старую базу данных. Теперь я пытаюсь сделать что-то подобное;

UPDATE new_db.new SET post_content = REPLACE(post_content,(SELECT post_content FROM old_db.wp_posts WHERE id = oldpost#) WHERE id = newpost#;

Я понимаю, что мне придется сделать это для post_date, post_title и post_content между old_db.wp_posts и new_db.posts, я просто надеюсь, что это действительно как-то возможно….

Share
  1. Вам также придется обновить wp_postmeta и wp_term_relationships, а также wp_comments и wp_commentmeta, если есть какие-либо комментарии. Посмотрите на codex.wordpress.org/File:WP3.0-ERD.png структуру базы данных. Почему вы не можете импортировать все в пустую установку WP, а затем экспортировать сообщения более логичным способом? Это может быть проще, если вы имеете дело с большим количеством записей для импорта.

    • 0
    • Я добавлял новые сообщения в новый блог через QuickPress, так что о wp_postmeta, wp_term_relationships и обо всем, что связано с комментариями, не может быть и речи. У меня всего около 30 постов. Но я пытаюсь разработать способ, который будет масштабироваться до нашего другого блога с 1500 опубликованными постами.

      • 0
    • Петр, спасибо за ссылку. Однако скрипт предназначен для замены строк в любой таблице любой базы данных (по умолчанию). Однако мне нравится, как он обрабатывает сериализованные данные (больше информации для меня в Google). Я хочу заменить запись post_content в целом, от old_db.wp_posts(id=1) до new_db.wp_posts(id=5).

      • 0
  2. Похоже, что попытка поместить «поле X» в db.table.record.fieldY слишком атомарна или требует лучшей волшебной палочки, чем может найти Google. Я пошел вперед и просто вырвал посты оптом и ввел их в новую БД. Вот как я это сделал. Надеюсь, это поможет следующему бедолаге, который окажется в том же месте, что и я…

    Как копировать и вставлять сообщения WordPress из старой базы данных в новую.

    0) Сначала сделайте резервную копию новой БД.

    mysqldump -u root -p new_db >> dump-new_db-datetime.sql
    

    1) сначала найдите все свои старые опубликованные посты и страницы;

    SELECT id,post_date,post_title FROM old_db.old_posts WHERE
     post_type = 'post' AND post_status = 'publish' ORDER BY id;
    

    2) Удалите все свои ревизии с помощью ;

    DELETE FROM old_posts WHERE post_type = "revision";
    

    3) вставьте свои старые посты и страницы в новую БД

    INSERT INTO new_db.new_posts
      (
      post_author,
      post_date,
      post_date_gmt,
      post_content,
      post_title,
      post_excerpt,
      post_status,
      comment_status,
      ping_status,
      post_password,
      post_name,
      to_ping,
      pinged,
      post_modified,
      post_modified_gmt,
      post_content_filtered,
      post_parent,
      guid,
      menu_order,
      post_type,
      post_mime_type,
      comment_count
      )
    SELECT
      old_posts.post_author,
      old_posts.post_date,
      old_posts.post_date_gmt,
      old_posts.post_content,
      old_posts.post_title,
      old_posts.post_excerpt,
      old_posts.post_status,
      old_posts.comment_status,
      old_posts.ping_status,
      old_posts.post_password,
      old_posts.post_name,
      old_posts.to_ping,
      old_posts.pinged,
      old_posts.post_modified,
      old_posts.post_modified_gmt,
      old_posts.post_content_filtered,
      old_posts.post_parent,
      old_posts.guid,
      old_posts.menu_order,
      old_posts.post_type,
      old_posts.post_mime_type,
      old_posts.comment_count
    FROM old_db.old_posts;
    
    • 0
  3. Это возможно, что вы хотите, простым способом. Взгляните на http://spectacu.la/search-and-replace-for-wordpress-databases/ ; который будет выполнять все замены автоматически, сохраняя при этом правильные спецификации длины сериализованных данных. Привет, Питер

    • 0

Оставить ответ

You must login to add an answer.