在mysql中搜索并替换内容中的图像维度?

时间:2012-12-04 20:44:01

标签: mysql image wordpress replace

我有一个包含超过500个帖子的wordpress博客。第一个后期图像总是550px宽,高度在300px到450px之间。

博客设计已更新,第一个帖子图片现在宽度为600px,介于350px和500px之间。我已经手动下载了第一张图片,并将它们从550张调整为600张,但质量稍有不好。

最简单的方法是在数据库中搜索和替换。寻找width =“550”并将其替换为width =“600”,但是高度存在问题。这不是固定变量,如550。

如果wordpress图片有自己的表格,我可以简单地做一些像

这样的事情
update  wp_posts
set height = height*1.09;

但是在wordpress的情况下,这是无法做到的,因为信息存储在post_content中,如下所示:

<img class="alignnone size-full wp-image-4352" title="Image Title" src="http://www.website.com/wp-content/uploads/2012/12/image.jpg" alt="image" width="550" height="351" />

如何在mysql中按宽度的比例改变高度?

1 个答案:

答案 0 :(得分:1)

这是一个非常棘手的问题。但这也是一个有趣的问题。

无论如何,这就是它。要从post_content图像中提取宽度和高度,请创建视图

create view temp_images (id, width, height) as
select id,
       ExtractValue(post_content, '/img/@width'),
       ExtractValue(post_content, '/img/@height')
from wp_posts
where post_content like '<img%'
      and ExtractValue(post_content, '/img/@width') = 550;

你不需要你的宽度,但如果你想玩,它就在这里。 现在,您有图像帖子的ID和相应的宽度和高度。这样,您可以分两步更新图像元素的宽度和高度

update wp_posts, temp_images
set post_content = UpdateXml(post_content, '/img/@width', 'width="600"')
where wp_posts.id = temp_images.id;

update wp_posts, temp_images
set post_content = UpdateXml(post_content, '/img/@height',
                             concat('height="', round(height * 1.09), '"'))
where wp_posts.id = temp_images.id;

最后清理,当然

drop view temp_images;

最后但并非最不重要的是,这里有SQL Fiddle用于测试和播放。