MySQL, SQL - Как ВЫБРАТЬ, ОБНОВИТЬ и ЗАМЕНИТЬ одновременно - PullRequest
0 голосов
/ 28 июня 2018

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

Итак, моя проблема такова:

У меня есть таблица базы данных Wordpress wp_posts и другая таблица с именем wp_postmeta, wp_post есть строка с именем post_content и wp_postmeta есть строка с именем meta_key, я пытаюсь SELECT , ОБНОВИТЬ и ЗАМЕНИТЬ a строка из wp_post.post_content без изменения других записей. Чтобы не изменять другие записи, мне нужно выбрать из wp_postmeta.meta_key записей, которые имеют meta_key " city ".

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

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 , который я выполнял ранее.

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

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

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

1 Ответ

0 голосов
/ 28 июня 2018

Вы можете использовать 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%";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...