[英]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.