更新选择结果。将作者与Meta Box值互换的SQL查询

时间:2016-06-27 作者:Nicola Giulia Pernice

我继承了一个项目,在这个项目中,由于某种原因,以前的开发人员为作者创建了一个自定义帖子类型,并在帖子编辑屏幕中列出了所有这些作者的cpt标题。这导致了大量额外的代码来处理永久链接、模板、编辑和自定义查询,而所有这些都是现成的。

所以,我已经找到了一种方法来创建作者CPT中所有缺失的用户。现在,我正在寻找一个SQL命令或脚本,以根据mata\\u键值将常规作者与新作者交换。但是,对于某些帖子,此值可能为null.

通过此SQL查询,我将所有具有某个fake\\u author id的帖子分组:

SELECT ID, post_title FROM wp_posts JOIN wp_postmeta a ON ( a.post_id = wp_posts.ID AND a.meta_key=\'fake_author\' AND a.meta_value = \'111111\');

如何在post\\u author列中为生成的帖子执行更新?

我目前的尝试: UPDATE wp_posts INNER JOIN wp_postmeta a ON ( a.post_id = wp_posts.ID AND a.meta_key=\'fake_author\' AND a.meta_value=111111) SET post_author=2222222;

然而,这没有给出任何结果。

1 个回复
SO网友:majick

我总是发现,从一个表中获取结果并循环它们,而不是像那样尝试将它们连接起来,这样就不那么令人困惑了。。。例如:。

global $wpdb;
$query = "SELECT post_id FROM wp_postmeta WHERE meta_key=\'fake_author\' AND meta_value=\'11111\'";
$results = $wpdb->get_results($query);

foreach ($results as $result) {
    $query = "UPDATE wp_posts SET post_author=\'222222\' WHERE ID=\'".$result->post_id."\'";
    $wpdb->query($query);
}