我知道我不能通过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=\"%\"'
组件没有jive。
因此,我汲取了您的集体知识,想出了一些方法来获取src="%"
并将其替换为设置页面ID号的设置URL。提前谢谢。
答案 0 :(得分:1)
如果每页只有一个图像,快速解决方案就是这样:
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="
右侧的身体部位。
上次检查是一项非常脏的检查,以确保字符串中只有一个图像。在某些情况下它可能会失败,但它可能有所帮助。
答案 1 :(得分:0)
我的建议是用你的替换字符串构建一个表格,如下所示:
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值的所有记录。