将一个META_KEY的值复制到另一个META_KEY的SQL查询

时间:2016-05-12 作者:Hal Atkins

我试图找出如何用不同自定义字段的值替换一个高级自定义字段的值。有人能帮我构造一个SQL查询,在整个数据库中执行此操作吗?

包含我要复制的材料的meta\\u键是“ehp\\U引文”,复制的目标是“ehp\\U引文”。

2 个回复
SO网友:Cubakos

首先进行db备份!其次,在您的问题中,您提到了相同的meta\\u键,因此做出了以下假设:

要保留的meta\\u键是“ehp\\U引文”

您要更改的meta\\u键是“ehp\\u引文\\u旧”*因此请进行相应的更正

然后你可以尝试以下方法:

UPDATE `wp_postmeta` AS pm_to_change
LEFT JOIN `wp_postmeta` AS pm_we_want ON pm_to_change.post_id = pm_we_want.post_id
SET pm_to_change.meta_value = pm_we_want.meta_value
WHERE pm_to_change.meta_key = \'ehp_citation_old\'
    AND pm_we_want.meta_key = \'ehp_citation\'
    AND pm_we_want.meta_value != \'\'
还要确保将db前缀更改为mach yours。

为了解释,

1) 我们说要更新wp_postmeta 表,我们为其命名为:pm_to_change

2) 我们将左连接到同一个表(wp_postmeta) 但这一次,我们用“pm\\u we\\u want”来引用它,并且我们还说,我们需要相同的数据post_id

3) 在这里,我们说要改变什么。我们想要meta_valuepm_to_change 设置为meta_valuepm_we_want

3) 最后,我们指定meta_key 我们需要上述值。所以我们想要meta_keypm_to_change 表格应为:ehp_citation_old 以及meta_keypm_we_want 表格应为:ehp_citation.

奖金1:AND pm_we_want.meta_value != \'\' 最后还要检查我们想要的值,从ehp_citation 不为空。这意味着如果它是空的,我们会保留旧的ehp_citation_old

奖励2:首先运行此选择以检查我们是否获得了正确的数据:

SELECT pm_to_change.meta_value AS \'Change_This\', pm_we_want.meta_value AS \'To_That\'
FROM `wp_postmeta` AS pm_to_change
LEFT JOIN `wp_postmeta` AS pm_we_want ON pm_to_change.post_id = pm_we_want.post_id
WHERE pm_to_change.meta_key = \'ehp_citation_old\'
    AND pm_we_want.meta_key = \'ehp_citation\'
    AND pm_we_want.meta_value != \'\'

SO网友:Jim

你可以试着用Wordpress自己的功能来实现。您应该考虑研究以下内容:https://codex.wordpress.org/Function_Reference/update_post_meta / https://www.advancedcustomfields.com/resources/update_field/

您可以执行执行以下操作的代码

请求加载所需帖子的所有帖子/页面,使用foreach循环或have\\u posts()函数在帖子中循环这些项目,更改要更新的字段的值