【问题标题】:MySQL: Replace substring if string ends in jpg, gif or pngMySQL:如果字符串以 jpg、gif 或 png 结尾,则替换子字符串
【发布时间】:2010-01-19 03:48:06
【问题描述】:

我在帮一个朋友帮忙,让他离开 Blogger 并进入托管的 WordPress 博客。

最大的问题是,有超过 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 之间纠结,但看起来它有很多 MySQL 大师,所以我在这里。)

【问题讨论】:

    标签: sql mysql wordpress string


    【解决方案1】:

    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');
    

    【讨论】:

      【解决方案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
      

      参考资料:

      【讨论】:

      • 如果区分大小写是个问题,请使用 INSTR 调用在 UPPERLOWER 中以匹配文件扩展名的大小写 - 在我的回答中,它会 LOWER .
      【解决方案3】:

      如果一切都失败了,那么使用import feature 怎么样?然后使用plugin 来获取您的图像(检查插件帖子中的 cmets,因为有一些相关信息)。

      【讨论】:

        【解决方案4】:

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

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

        P.S.这是假设内容多于 URL,在这种情况下,普通的 mysql string functions 就足够了。

        【讨论】:

          猜你喜欢
          • 2012-07-08
          • 1970-01-01
          • 2018-10-16
          • 2018-11-09
          • 2022-11-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多