MySQL, SQL - Как ВЫБРАТЬ, ОБНОВИТЬ и ЗАМЕНИТЬ одновременно

0

Прежде чем вопрос будет помечен, закрыт или что-либо, что я пытался найти для ответа на сайте, и я всегда нахожу одну часть того, что я ищу, или то, что я пытаюсь сделать, но никогда ничего конкретного, я пытался выбрать SELECT и ОБНОВЛЕНИЕ, но никогда не ВЫБРАТЬ, ОБНОВИТЬ и ЗАМЕНИТЬ

Поэтому моя проблема такова:

У меня есть таблицы баз данных Wordpress wp_posts и другая таблица с именем wp_postmeta, wp_post имеет ряд с именем post_content и wp_postmeta имеет ряд называется meta_key, я пытаюсь SELECT, UPDATE и заменить строку из wp_post.post_content без изменения других записей. Чтобы не изменять другие записи, мне нужно выбрать из wp_postmeta.meta_key записи, которые имеют meta_key "города".

Так что в основном, если я бегу

SELECT p.post_content FROM wp_post p
INNER JOIN wp_postmeta m ON p.id = m.post_id
WHERE p.post_content LIKE "%TEXT I NEED TO REPLACE%"
AND m.meta_key LIKE "%city%";

Это даст мне 600 записей из 5000, которые используют тот же текст, который мне нужно заменить.

Поэтому, если я просто запускаю

UPDATE wp_post SET post_content = REPLACE 
(post_content, 'TEXT I NEED TO REPLACE', 'NEW TEXT THAT I AM REPLACING');

Это изменит 5000 записей, и я не хочу этого, мне нужно заменить 600 записей из запроса SELECT, с которым я работал раньше.

В заключение мне нужен способ объединить эти 2 запроса так или иначе, чтобы заменить строку post_content из этих 600 записей, не затрагивая остальные 4400 слева, это достижимо?

Надеюсь, моя проблема достаточно ясна. Еще раз спасибо.

(Для этого я использую Sequel Pro)

  • 4
    Возможный дубликат MySQL - запрос UPDATE на основе запроса SELECT
  • 0
    @jmoerdyk - Мои извинения, но как это дубликат относительно того, что я спрашиваю? Я не пытаюсь обновить всю строку или запись, я просто пытаюсь обновить и заменить строку или фрагмент значения этой строки.
Показать ещё 1 комментарий
Теги:
database

1 ответ

1
Лучший ответ

Вы можете использовать JOIN и WHERE в запросе UPDATE, как и запрос SELECT, для фильтрации обновляемых строк.

UPDATE wp_post AS p
JOIN wp_postmeta AS m ON p.id = m.post_id
SET p.post_content = REPLACE(post_content, 'TEXT I NEED TO REPLACE', 'NEW TEXT THAT I AM REPLACING')
WHERE p.post_content LIKE "%TEXT I NEED TO REPLACE%"
AND m.meta_key LIKE "%city%";
  • 0
    См. Также stackoverflow.com/a/32082037/495319 для другого примера превращения UPDATE для нескольких таблиц в SELECT (или наоборот).
  • 0
    Это результат, который я ожидал, большое спасибо. Я не знал, что вы могли бы объединить это так. Я новичок в этом.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню