2010-01-19 91 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獲取您的圖片(查看插件文章中的評論,因爲有一些相關信息)。