站点改版、栏目重组、跨站内容聚合时,常需要把一个栏目的所有文档批量复制到另一个栏目。织梦默认不提供"复制栏目内容"按钮,需要借助后台工具或 SQL 完成。本文讲解织梦栏目内容批量复制迁移的几种方案,覆盖同站复制、跨站迁移、保持原 ID 与新建 ID 两种模式。
一、迁移场景与方案选型
- 同站栏目合并:用 SQL 把文档 typeid 改为目标栏目(移动,非复制)
- 同站栏目复制:用 SQL 复制文档到新栏目(保留原文档,新 ID)
- 跨站迁移:导出 SQL 改 ID 后导入新站
- 纯附件迁移:只迁移图片与文档,重新发布
二、SQL 移动(不保留原文档)
若只是把 A 栏目的文档搬到 B 栏目,最简单:
UPDATE dede_archives SET typeid=8, typeid2='' WHERE typeid=5;
更新后需到后台"重新生成栏目列表"和"重新生成文档",否则前台链接不变。
三、SQL 复制(保留原文档)
若要保留原文档同时在新栏目也有一份,需复制记录并改 typeid。核心 SQL:
-- 1. 复制主表记录到新栏目
INSERT INTO dede_archives
(typeid, typeid2, sortrank, flag, ismake, channel, arcrank, click, title, ...)
SELECT 8, '', sortrank, flag, ismake, channel, arcrank, 0, title, ...
FROM dede_archives WHERE typeid=5;
-- 2. 取得新插入的 ID,复制附加表
SET @last_id=LAST_INSERT_ID();
INSERT INTO dede_addonarticle (aid, typeid, body)
SELECT a.id + (SELECT MAX(id) FROM dede_archives) - (SELECT MIN(id) FROM dede_archives WHERE typeid=5),
8, body
FROM dede_addonarticle
WHERE typeid=5;
更稳妥的做法是用 PHP 脚本循环读取源栏目文档,逐条 INSERT 并维护 ID 关系,避免自增 ID 冲突。
四、跨站迁移
跨站迁移的核心是导出 SQL 改写 ID。步骤:
- phpMyAdmin 导出源栏目 SQL:
SELECT * FROM dede_archives WHERE typeid=5 - 同步导出对应的 dede_addonarticle、dede_uploads 记录
- 在新站执行 SQL 前,把 archives 表的 id 字段去掉(让新站自增),或批量加上偏移量
- 附件文件用 FTP 复制到新站 /uploads/allimg/
- 在新站后台重新生成 HTML
迁移后记得更新站内链接(若用了绝对路径),可用批量替换 SQL 修正。
五、注意事项
复制时务必同步复制附加表(addonarticle/addonimages),否则新文档打开是空白。
复制后新文档的发布时间、点击数会与原文一致,建议重置点击数为 0。
跨站迁移注意数据库前缀差异(dede_ vs 自定义前缀),导入前统一替换。
大量迁移建议在低峰期执行,避免锁表影响线上访问。
迁移完成后检查内链是否失效,特别是栏目页的"相关推荐"。
六、后续优化方向
完成织梦栏目内容批量复制迁移后,建议把迁移脚本沉淀为可复用工具,按"同站复制""跨站迁移""纯附件迁移"分类归档。对于多站点矩阵运营,可建立内容中台,把主站内容一键分发到子站,自动处理 ID 映射、附件路径替换、内链重写,让栏目重组从手工运维升级为标准化流程,支撑站点矩阵的高效扩张。