我需要将包含31.media.tumblr.com
的所有网址替换为41.media.tumblr.com
。但是,如果网址31.media.tumblr.com
中包含.gif
,则不得更改。
这是我的代码;但它会更改所有内容,其中包含.gif
的网址...当我运行它时:
UPDATE wp_posts
SET post_content
= REPLACE(post_content
,'31.media.tumblr.com/'
,'41.media.tumblr.com/')
WHERE post_content LIKE '%31.media.tumblr.com/%'
AND post_content NOT LIKE '%.gif';
P.S。这里有一个31. url的例子,最后有gif
https://31.media.tumblr.com/79db8c1df4f893bc20d53063e03834f6/tumblr_n1e93kMh3z1rjbi2lo1_500.gif
答案 0 :(得分:2)
您的查询看起来很好,我认为问题是post_content中的尾随空格。尝试:
UPDATE wp_posts
SET post_content
= REPLACE(post_content
,'31.media.tumblr.com/'
,'41.media.tumblr.com/')
WHERE post_content LIKE '%31.media.tumblr.com/%'
AND rtrim(post_content) NOT LIKE '%.gif';
看看是否有帮助。测试用例:
create table wp_posts (post_content varchar(255));
insert into wp_posts
values ('https://31.media.tumblr.com/79db8c1df4f893bc20d53063e03834f6/tumblr_n1e93kMh3z1rjbi2lo1_500.gif')
insert into wp_posts
values ('https://31.media.tumblr.com/79db8c1df4f893bc20d53063e03834f6/tumblr_n1e93kMh3z1rjbi2lo1_500.gif ');
select * from wp_posts
where post_content LIKE '%31.media.tumblr.com/%'
AND post_content NOT LIKE '%.gif';
[...]
1 row in set (0.00 sec)
select * from wp_posts
where post_content LIKE '%31.media.tumblr.com/%'
AND rtrim(post_content) NOT LIKE '%.gif';
[...]
Empty set (0.00 sec)
答案 1 :(得分:0)
您提供的示例网址是一个图片,因此我认为它位于<img>
标记之内,如果是这样的话......您需要做的就是添加%
通配符.gif
的结尾。这就是为什么脚本可能不起作用的原因。
试试这个
UPDATE wp_posts SET post_content = REPLACE(post_content,'31.media.tumblr.com/','41.media.tumblr.com/')
WHERE post_content LIKE '%31.media.tumblr.com/%'
AND post_content NOT LIKE '%.gif%';