解决SQL替换通配符

时间:2013-04-09 15:45:31

标签: mysql replace wildcard

我知道我不能通过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。提前谢谢。

2 个答案:

答案 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值的所有记录。