1

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

博客设计已经更新,第一个帖子图像现在是 600 像素宽和 350 像素到 500 像素高之间。我已经手动下载了第一张图片,并将它们的大小从 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中,如何改变高度与宽度成比例?

4

1 回答 1

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 。

于 2012-12-04T22:08:56.187 回答