船说 CMS 小说章节排序错乱怎么调整
学完这篇,你能在 10 分钟内定位船说CMS 章节顺序错乱的真正原因,并用后台编辑或一条 SQL 把整本书的章节重新排好,前台立刻恢复正常。
第一步:先分清是哪一种“错乱”
不同症状对应不同修法,先对号入座,别上来就改数据库。
- 整本倒序:最新章排在第一章位置,通常是采集时把倒序的目录页按顺序入库了。
- 中间插错:只有某几章跑到开头或结尾,一般是手动加章时排序值填成了 0。
- 分卷乱:卷名顺序不对,章节本身没问题,改的是分卷表的排序字段。
- 后台对、前台错:数据库里顺序是对的,说明是缓存没更新,见第六步。
第二步:备份数据库
打开 phpMyAdmin(宝塔面板:数据库 → 管理),选中站点数据库 → 顶部「导出」→ 导出方式选「快速」→ 格式 SQL → 点「执行」,把 .sql 文件存到本地。船说CMS 基于 ThinkPHP,数据表前缀是你安装时自己填的,下面统一写作 {prefix}_,请替换成实际的(常见如 bd_)。
第三步:少量章节,直接在后台改
登录后台 → 左侧菜单「小说管理」→「章节管理」→ 搜索书名 → 每个章节行右侧点「编辑」→ 修改「排序」输入框(有的版本叫「章节排序」或 orderid)→ 保存。
注意:排序值全部相同或全部为 0 时,程序会退化成按章节 ID 排序,看起来就像“排序功能失效”。正确做法是留出间隔,比如 10、20、30 这样填。
第四步:整本批量重排(推荐)
打开宝塔 phpMyAdmin 或 Navicat,选中数据库 → 点「SQL」标签页,先看一眼字段名:
SELECT id, nid, chapterid, orderid, title
FROM {prefix}_chapter
WHERE nid = 123
ORDER BY orderid ASC
LIMIT 20;
其中 nid 是小说 ID,chapterid 是章节序号,orderid 是排序字段(你的版本可能叫 sort、cid,以查询结果为准)。确认后执行批量重排:
SET @i := 0;
UPDATE {prefix}_chapter c
JOIN (
SELECT id, (@i := @i + 1) AS neworder
FROM {prefix}_chapter, (SELECT @i := 0) t
WHERE nid = 123
ORDER BY chapterid ASC
) x ON c.id = x.id
SET c.orderid = x.neworder;
把 123 换成你要修的小说 ID。这条语句按章节序号重新生成 1、2、3……的排序值。
注意:如果
chapterid(章节序号)本身就是采集错的,就改成ORDER BY id ASC(按入库时间排),或ORDER BY id DESC(入库顺序正好是倒的)。
执行完再跑一次第三步的 SELECT 验证,orderid 应该是连续递增的。
第五步:修分卷和采集规则
分卷顺序错,改的是分卷表(一般叫 {prefix}_volume 或 {prefix}_chapter_volume),把卷的 orderid 手动改成 1、2、3。
采集来的新书继续乱,就去后台「采集管理」→「小说采集」→ 选中你的采集规则 → 在「章节采集设置」里把章节顺序改为「正序」;如果源站目录是倒序的,勾选「章节倒序入库」再重新采集。
第六步:清缓存,刷新前台
后台右上角「清除缓存」(部分版本在「系统」→「更新缓存」)。如果没生效,用宝塔文件管理进网站目录,删除 Application/Runtime/Cache/ 和 Application/Runtime/Data/ 下的所有文件(ThinkPHP 3.x 路径,5.x 是 runtime/)。删缓存不会丢数据,别删整个 Runtime 以外的目录。
小结
- 先分类:整本倒序、中间插错、分卷乱、缓存问题,四种修法不同。
- 改库前必须导出 SQL 备份。
- 排序值不要全填 0 或重复,建议留间隔。
- 批量修复用
JOIN + 用户变量的 UPDATE 语句,改完先 SELECT 验证。 - 采集规则里的「正序/倒序」是根因,修完数据还得改规则,否则下次采集又乱。
- 数据库改完记得清 Runtime 缓存。
原文链接:https://www.gj0.com/thread-677.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。