如何通过MySQL批量随机分配WordPress千余篇文章的作者?
WordPress批量随机分配文章作者的MySQL实现
核心需求
将所有作者ID为1的文章,随机分配给另外10个指定用户,确保每个用户分到约100篇文章。
方案一:MySQL 8.0+(推荐,语法更简洁)
利用窗口函数ROW_NUMBER()给随机排序的文章编号,再通过编号取模来均匀分配作者ID:
-- 第一步:务必先备份wp_posts表(UPDATE操作不可逆) CREATE TABLE wp_posts_backup LIKE wp_posts; INSERT INTO wp_posts_backup SELECT * FROM wp_posts; -- 第二步:执行分配(假设目标用户ID为2-11,可根据实际ID替换) UPDATE wp_posts p JOIN ( SELECT ID, ROW_NUMBER() OVER(ORDER BY RAND()) AS rn FROM wp_posts WHERE post_author = 1 AND post_type = 'post' -- 仅处理文章类型,需包含页面可去掉该条件 ) AS temp ON p.ID = temp.ID SET p.post_author = 2 + (temp.rn - 1) % 10; -- 2是起始用户ID,10是目标用户总数
方案二:兼容MySQL 5.x版本
通过用户变量计数实现分配:
-- 第一步:备份表 CREATE TABLE wp_posts_backup LIKE wp_posts; INSERT INTO wp_posts_backup SELECT * FROM wp_posts; -- 第二步:初始化变量 SET @counter = 0; SET @start_author_id = 2; -- 第一个目标用户ID SET @total_authors = 10; -- 目标用户总数 -- 第三步:执行随机分配 UPDATE wp_posts SET post_author = @start_author_id + MOD(@counter := @counter + 1, @total_authors) WHERE post_author = 1 AND post_type = 'post' ORDER BY RAND(); -- 随机排序保证分配均匀
关键提示
- 替换
@start_author_id和@total_authors为你的实际用户ID范围和数量,比如用户ID是5-14,就把@start_author_id设为5,@total_authors设为10。 - 执行前可先用
SELECT验证分配结果:SELECT 2 + (ROW_NUMBER() OVER(ORDER BY RAND()) - 1) % 10 AS assigned_author, COUNT(*) FROM wp_posts WHERE post_author = 1 AND post_type = 'post' GROUP BY assigned_author; - 若需包含页面、自定义文章类型,去掉
post_type = 'post'条件即可。
内容的提问来源于stack exchange,提问作者user16529240
相关产品推荐
相关产品推荐

