2016-11-12 45 views
-1

並提前感謝您的任何幫助。我正在修復大型WordPress多站點數據庫中的所有損壞的鏈接,並且需要一些幫助來編寫SQL查詢以通過PHP MyAdmin運行。我已經搜查,但不能完美的解決方案......需要SQL查詢幫助:如何搜索和替換特定的文本喜歡x而不是喜歡xx

問題:我們有一千損壞的鏈接以http開頭更多:/,而不是http://

挑戰:下面將結果在衆多環節開始http:///

UPDATE wp_1_posts 
    SET post_content = replace (post_content, 
    'http:/', 
    'http://'); 

過程:我想編寫一個查詢首先選擇所有這些鏈接,這樣我就可以檢查它們以確保替換文本字符串時,我沒有做任何損害。下載數據庫轉儲並執行手動S &因爲我們正在討論一個多千兆字節的數據庫,所以R不是一個選項。

我覺得像這樣的工作...

SELECT * FROM wp_1_posts 
    WHERE post_content LIKE '%http:/%' 
    AND WHERE post_content NOT LIKE '%http://%' 

但這只是拋出一個語法錯誤。我甚至關閉?

問題#1:如何查找「http:/」的所有實例而不返回查詢結果中的所有「http://」實例。

問題2:如何安全地修復「http:/」的所有實例而不影響任何「http://」字符串。

僅供參考:我承認我知道這件事很危險,我不熟悉正則表達式。在。所有。這就是爲什麼我轉向你尋求幫助。再次感謝!

+0

第二'WHERE'應該被刪除。你有一個where條款有多個條件。這是基本的SQL語法,並非特定於MySQL,更不用說wordpress,MyAdmin或多站點了。 – GolezTrol

+0

一個可能的解決方案可能是首先將'http://'更新爲'http:/'。之後,您可以再次用'http://'替換'http:/'。如果你沒有經驗過正則表達式,並且大多數URL不正確,這是一個簡單的解決方案。如果只有百萬分之一是錯誤的,那麼這不是正確的方法,因爲你會首先打破所有這些。 – GolezTrol

+0

@GolezTrol感謝您的及時回覆!下面的返回和查詢結果爲空,雖然應用程序,我用來尋找確定的不良鏈接衆多的http:/網址... SELECT * FROM wp_1_posts WHERE POST_CONTENT LIKE '%的http:/%' 和POST_CONTENT NOT LIKE' %http://%' – jcnjr

回答

0

這應該工作,在MYSQL:

UPDATE wp_1_posts SET post_content = replace(post_content,'http:/', 'http://') 
WHERE post_content REGEXP 'http:/[^/]'