我正在尝试更新符合特定条件的WordPress数据库中所有帖子的元值。
我创建了一个名为update_with_false
的表,其中每行“value”与post_name
表中帖子的wp_posts
匹配。
我需要做的是将meta_value
“included_in_related_articles”的meta_key
更改为“{1}}表中与帖子名称相同的每个帖子的”真实“在update_with_false表中。
这是我的SQL,但是我收到了语法错误:
wp_posts
希望这是有道理的。我附上了一些我需要更新的元字段和我创建的额外表格的截图
谢谢!
答案 0 :(得分:3)
您的说明非常清楚。
如果我理解正确,您要更新 wp_postmeta.meta_value 并将其设置为 true ,如果找到 wp_posts.post_name 中的值在 update_with_false.value 。
您可以先将 wp_posts.post_name 列添加到 wp_postmeta 表,然后通过进一步加入 update_with_false 表来限制已加入的帖子来执行此操作
我把它写在了我的头顶上(稍微帮助了一下) ER diagram):
update wp_postmeta pm
inner join wp_posts p on p.id = pm.post_id
inner join update_with_false x on x.value = p.post_name
set pm.meta_value = 'true'
where pm.meta_key = 'included_in_related_articles'
答案 1 :(得分:1)
可以使用子查询完成,如下所示:
UPDATE `wp_postmeta` SET `meta_value`= 'true' WHERE meta_key = 'included_in_related_articles' AND `post_id` IN (SELECT ID FROM wp_posts AS wps LEFT JOIN update_with_false AS uwf on (wps.post_name = uwf.value) )
其中SELECT ID FROM wp_posts AS wps LEFT JOIN update_with_false AS uwf on (wps.post_name = uwf.value)
是子查询,将从wp_posts表中提供逗号分隔的ID。