2016-05-28 84 views
1

作爲將網站遷移到HTTPS的一部分,我將博客文章中的HTTP URL更改爲相對URL。只更新列的一部分 - 多行

當前數據articles表:

╔════╦═══════════════════════════════════════════════════════════════╗ 
║ ID ║ content              ║ 
╠════╬═══════════════════════════════════════════════════════════════╣ 
║ 1 ║ lorem ipsum <a href='http://www.example.com/'>link</a> etc ║ 
║ 2 ║ see more <a href='http://www.example.com/page.html'>here</a> ║ 
║ 3 ║ bla bla bla <img src='http://www.example.com/image.jpg' /> ║ 
╚════╩═══════════════════════════════════════════════════════════════╝ 

所需的輸出與相對URL:

╔════╦═══════════════════════════════════════════════════════════════╗ 
║ ID ║ content              ║ 
╠════╬═══════════════════════════════════════════════════════════════╣ 
║ 1 ║ lorem ipsum <a href='//www.example.com/'>link</a> etc   ║ 
║ 2 ║ see more <a href='//www.example.com/page.html'>here</a>  ║ 
║ 3 ║ bla bla bla <img src='//www.example.com/image.jpg' />   ║ 
╚════╩═══════════════════════════════════════════════════════════════╝ 

注:這些硬編碼

  • 有幾百行鏈接。
  • 每行可以包含更多鏈接。

我想今天過的每一行,改變與正則表達式中的鏈接,然後更新該行。

$query = $db->query("SELECT id,content FROM articles WHERE content LIKE '%http://www.example.com%'"); 
while ($row = $query->fetch_row()) { 
    $updatedContent = /* some regex to remove the "http:" part */ 
    $db->query("UPDATE articles SET content = ..."); 
} 

但因爲我想學習新的東西,我的問題是:

是否有其他辦法嗎?可能有一些正則表達式在PostgreSQL,將允許只更新列的一部分,而不是浪費資源在數百行上,每個行都有數千個字符?

回答

2

你不需要PHP。它可以通過一個簡單的數據庫查詢來完成:

UPDATE articles SET content = REPLACE(content, 'http:', '');

+2

你也可以用WHERE過濾: 'UPDATE your_table SET your_field = REPLACE(your_field, 'HTTP:', '') WHERE your_field LIKE '%HTTP%'' –