Прежде чем вопрос будет помечен, закрыт или что-либо, что я пытался найти для ответа на сайте, и я всегда нахожу одну часть того, что я ищу, или то, что я пытаюсь сделать, но никогда ничего конкретного, я пытался выбрать 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)
Вы можете использовать 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%";
UPDATE
для нескольких таблиц в SELECT
(или наоборот).