仅更新列的一部分 - 多行

时间:2016-05-28 11:55:16

标签: php postgresql

作为将网站迁移到HTTPS的一部分,我将博客文章中的HTTP网址更改为相对网址。

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' />    ║
╚════╩═══════════════════════════════════════════════════════════════╝
带有相对网址的

所需输出

╔════╦═══════════════════════════════════════════════════════════════╗
║ 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 中的一些正则表达式,允许仅更新列的一部分而不会浪费资源经历了数百行,每行有数千个字符?

1 个答案:

答案 0 :(得分:2)

你不需要PHP。它可以通过简单的数据库查询来完成:

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