在连接的SQL查询中编辑列

时间:2016-06-09 19:15:59

标签: mysql sql wordpress left-join guid

我正在一个wordpress网站上工作,我需要更改所有附件图片的上传路径(我不知道为什么客户最初选择不将它们组织起来。)

这是我正在运行的选择我的附件,并抓住父发布的内容'发布日期是如此,我可以正确地抓住我想要的东西。

select a.id as child_post_id, a.guid as upload_path, b.post_date as parent_post_date
from wp_posts a
left outer join wp_posts b
on a.post_parent = b.id
where 
a.post_type = 'attachment'
and b.post_date between '2015-11-17 00:00:00' and '2015-11-17 23:59:59'

将我在该范围内寻找的8个左右的图像附件作为测试,它们与父帖帖子ID配对,所以我知道我得到了我想要的东西。

现在我想替换guid列中的一部分值,所以我在" upload_path"

的输出列中进行替换
update upload_path
set upload_path = replace(upload_path, 'wp-content/uploads/', 'wp-content/uploads/2015/11/')
; 

这会导致语法失败,我觉得我拉怪了一个奇怪的操作因此寻找答案很困难。

我没有超级经验深入SQL,但我正在努力学习。

我是否需要保存此查询,然后对该已保存的查询运行更新?

这可能是一个简单的解决方法,有人可以帮助我 - 请指出我正确的方向,请。

运行mysql 5.1.73(我们必须运行生产服务器正在运行的东西)

1 个答案:

答案 0 :(得分:-1)

事实证明,我试图在select语句中运行更新。哪个是禁止的。

我必须运行一个更新语句,然后定义内部联接并将每个“where”声明为该命令中的限制器。使用“和”语法。

UPDATE wp_posts AS a
INNER JOIN wp_posts AS b ON a.post_parent = b.id
and a.post_type = 'attachment'
and b.post_date between '2015-11-17 00:00:00' and '2015-11-17 23:59:59'
set a.guid = replace(a.guid, 'wp-content/uploads/', 'wp-content/uploads/2015/11/')
limit 0,30
; 

精彩的学习经历。感谢所有这一切。