我需要更新表中所有行的作者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;
但这感觉很难看,虽然我可能安全地为临时值选择一些适当的高范围,但我真的应该检查它们是否先存在,这使得整个过程更加复杂。
周围有更优雅的方式吗?
答案 0 :(得分:0)
既然你已经声明用户ID可以是任何,那么我认为这样做的优雅方式是:
创建虚拟列(如dummyUserID
或_userId
或previousUserId
)。当然,无论你想要什么。
将userId
更新为新添加的列
UPDATE wp_posts SET old_post_author = post_author;
那就是诀窍,使用新添加的专栏做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;