繁体   English   中英

解决SQL替换通配符

[英]Working Around SQL Replace Wildcards

我知道我无法通过phpMyAdmin在MySQL替换查询中使用通配符。 但是,我需要某种解决方法。 我非常乐于接受想法。 这是皮包骨头的:

我在MySQL数据库中有大约2,000页,需要更新图像URL。 有些是本地的,有些是热链接的。 每一个都不相同,URL长度不同,页面上的图像和新图像在每个页面ID号中都是唯一的,并且每个图像都出现在页面的不同位置。

我基本上需要执行以下操作:

UPDATE pages SET body = replace(body, 'src=\"%\"', 'src=\"http://newdomain/newimage.jpg\"') WHERE id="{page_number}"

但是我知道'src=\\"%\\"'组件不会跳动。

因此,我不知所措,想出一种方法来采用src="%"并将其替换为设置的页面ID号的设置的URL。 提前致谢。

如果每页只有一张图像,一个快速的解决方案是这样的:

UPDATE pages
SET
  body = CONCAT(
    SUBSTRING_INDEX(body, 'src="', 1),
    'src=\"http://newdomain/newimage.jpg\"',
    SUBSTRING(
      SUBSTRING_INDEX(body, 'src="', -1)
      FROM LOCATE('"', SUBSTRING_INDEX(body, 'src="', -1))+1)
    )
WHERE
  id="{page_number}" AND
  body NOT LIKE '%<img%<img%';

第一个SUBSTRING_INDEX提取主体部分在src="的左侧,最后两个嵌套的SUBSTRING_INDEX提取主体部分在第一个" src="的右侧。

最后检查是一项非常脏的检查,以确保字符串中仅存在一个图像。 在某些情况下它可能会失败,但可能会有所帮助。

我的建议是用替换字符串构建一个表,如下所示:

page_id     replace
1           src="..."

然后,您可以像这样跨JOIN更新

UPDATE pages AS p
INNER JOIN replace AS r
  ON p.page_id = r.page_id
SET p.body = REPLACE(p.body, CONCAT('src="', SUBSTRING_INDEX(SUBSTRING_INDEX(p.body, 'src="', -1), '"', 1), '"', r.replace);

这将用相同格式的新值替换最后出现的任何格式为src="..." ,因此这将适用于具有单个src值的所有记录。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM