在问题被标记,关闭或试图在网站上寻找答案的任何事情之前,我总是找到我所寻找的内容或我想做的事情的一部分,但从来没有具体的东西,我已经尝试过进行 SELECT 和 UPDATE ,但不要执行 SELECT , UPDATE 和 REPLACE
所以我的问题是这个
我有一个Wordpress数据库表wp_posts
和另一个名为wp_postmeta
的表,
wp_post
的一行名为post_content
,而wp_postmeta
的一行名为meta_key
,我正在尝试 SELECT , UPDATE 和 REPLACE 来自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%";
这将为我提供5000条条目中的600条,它们共享我需要替换的相同文本。
所以,如果我刚跑步
UPDATE wp_post SET post_content = REPLACE
(post_content, 'TEXT I NEED TO REPLACE', 'NEW TEXT THAT I AM REPLACING');
这将更改5000个条目,但我不希望这样做,我需要替换之前运行的 SELECT 查询中的600个条目。
总而言之,我需要一种以某种方式合并这两个查询的方式,以便替换那600个条目的post_content字符串,而不影响剩下的其他4400个,这是可以实现的吗?
我希望我的问题足够清楚。再次感谢。
(我正在为此使用Sequel Pro)
答案 0 :(得分: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%";