0

我需要更新表中所有行的作者 ID(它恰好是 WordPress wp_posts 表中的作者)。

如果我想更改作者 ID 1 -> 10,我可以这样做:-

UPDATE wp_posts SET post_author = 10 WHERE post_author = 1;

(注意——实际上我会使用 $wpdb 类,但这是底层 SQL,用户 ID 只是示例——我不能假设实际 ID 是什么)。

该更新工作正常。但是,如果在原始数据集中我已经有一个作者 ID=10,并且我需要将该作者更新为 ID=20,那么我就会遇到麻烦 - 我已经将所有 ID=1 更改为 ID=10 ,因此再次执行相同的更新将为所有最初具有作者 ID=10 和 ID=1 的帖子设置 ID=20。

我可以使用一组临时 ID 来解决问题,例如:-

UPDATE wp_posts SET post_author = 90010 WHERE post_author = 1;
UPDATE wp_posts SET post_author = 90020 WHERE post_author = 10;
UPDATE wp_posts SET post_author = 10 WHERE post_author = 90010;
UPDATE wp_posts SET post_author = 20 WHERE post_author = 90020;

但这感觉很难看,虽然我可能安全地为临时值选择了一些合适的高范围,但我真的应该首先检查它们不存在,这使得整个过程更加复杂。

有没有更优雅的方法来解决这个问题?

4

1 回答 1

0

既然您已经声明用户 ID 可以是任何东西,我似乎是这样做的优雅方式是:

  1. 创建一个虚拟列(如dummyUserIDor_userIdpreviousUserId)。当然,随便你。

  2. 更新userId到添加的新列

    UPDATE wp_posts SET old_post_author = post_author;

  3. 那么这就是诀窍,UPDATE使用新添加的列。

    UPDATE wp_posts SET post_author = 90010 WHERE old_post_author = 1;

    UPDATE wp_posts SET post_author = 90020 WHERE old_post_author = 10;

    UPDATE wp_posts SET post_author = 10 WHERE old_post_author = 90010;

    UPDATE wp_posts SET post_author = 20 WHERE old_post_author = 90020;

于 2013-06-26T07:43:23.353 回答