2010-01-19 54 views
1

我正在为朋友做点好事,让他从Blogger转移到托管的WordPress博客上。MySQL:如果字符串以jpg,gif或png结尾,则替换子字符串

最大的问题是,有超过1,800个帖子,有很多图片链接需要处理。 WordPress没有自动导入这些内容的机制,所以我正在手动进行。

我已经使用wget下载曾经在网站上链接/嵌入的每一个图像。现在我需要一些建立MySQL查询的帮助来将博客中的所有图像更改为新地址。

例如:

http://www.externaldomain.com/some/link/to/an/image.jpg 

应该成为:

http://www.newbloghosting.com/wordpress/wp-content/uploads/legacy/www.externaldomain.com/some/link/to/an/image.jpg 

所以该条件,如果在POST_CONTENT字符串为jpeg,JPG,GIF或PNG结束时,替换:

http:// 

http://www.newbloghosting.com/wordpress/wp-content/uploads/legacy/ 

我知道该怎么做了毯子

UPDATE wp_posts SET post_content = replace(post_content, 'http://www.old-domain.com', 'http://www.new-domain.com'); 

更换,但我有一个很难搞清楚如何完成我的更细致,有条件的方法。

感谢您提供的任何指导。 (在这里张贴或ServerFault之间撕裂,但SO看起来像它有很多的MySQL大师,所以我在这里)。

回答

-1

我不认为它可以做一个简单的查询,但它是相对容易做一个简单的PHP脚本。只需在php中简单循环遍历每一行内容,然后在内容字段上执行preg_replace,然后更新该单行。

它不像在sql中那样高雅,但它肯定会在今天的某个时间完成今天的工作。

P.S.这是假设有更多的内容不仅仅是网址,在这种情况下,正常mysql string functions就足够了。

2

如果找到旧的子字符串,REPLACE只会执行更改 - 我没有看到问题。

REPLACE(post_content, 'http://www.old-domain.com', 'http://www.new-domain.com'); 

...将工作。如果你想更新限制包含 “JPEG”, “JPG”, “GIF” 和/或 “PNG” 行,加:

WHERE INSTR(post_content, 'jpeg') > 0 
    OR INSTR(post_content, 'jpg') > 0 
    OR INSTR(post_content, 'gif') > 0 
    OR INSTR(post_content, 'png') > 0 

参考文献:

+0

如果区分大小写是一个问题,请使用'UPPER'或'LOWER'中的'INSTR'调用来匹配文件扩展名的大小写 - 在我的答案中,它会是'LOWER'。 – 2010-01-19 04:10:08

5

MySQL有很多选择的字符串操作函数,您可以插入到查询的WHERE部分。

UPDATE wp_posts 
SET post_content = REPLACE(post_content, 'http://www.old-domain.com', 'http://www.new-domain.com') 
WHERE RIGHT(post_content, 4) = 'jpeg' 
    OR RIGHT(post_content, 3) IN ('jpg', 'gif', 'png'); 

如果是我,我会做另外两件事:将其转换为小写以匹配例如, '.JPG',并匹配前JPG,GIF点,等:

WHERE LOWER(RIGHT(post_content, 5)) = '.jpeg' 
    OR LOWER(RIGHT(post_content, 4)) IN ('.jpg', '.gif', '.png'); 
+0

+1:关于区分大小写的观点。 – 2010-01-19 04:09:06

0

如果一切失败,有关使用import feature什么?然后使用plugin获取您的图片(查看插件文章中的评论,因为有一些相关信息)。

相关问题