【原创】批量更新帖子发布时间(含帖子数据表、发布数据表及缓存数据表)-建站教程下载

【原创】批量更新帖子发布时间(含帖子数据表、发布数据表及缓存数据表)

以下教程兔源码站长从phpmyadmin的对应数据库中执行SQL的方式进行实测的,请在修改先进行备份,一定要先进行备份,一定要先进行备份,一定要先进行备份

正确的修改方式(符合 Discuz! 数据表逻辑)
1. 先备份数据
在执行前,一定要先备份相关表:
  1. CREATE TABLE pre_forum_thread_backup AS SELECT * FROM pre_forum_thread;
  2. CREATE TABLE pre_forum_post_backup AS SELECT * FROM pre_forum_post;
  3. CREATE TABLE pre_forum_forum_backup AS SELECT * FROM pre_forum_forum;
复制代码
2. 分步更新时间戳
更新帖子表时间戳
  1. UPDATE pre_forum_post
  2. SET dateline = dateline - 86400
  3. WHERE dateline BETWEEN 1767400000 AND 1767499999;
复制代码
更新主题表时间戳
  1. UPDATE pre_forum_thread
  2. SET dateline = dateline - 86400,
  3.     lastpost = lastpost - 86400
  4. WHERE dateline BETWEEN 1767400000 AND 1767499999;
复制代码
(注明:其中86400为一天的时间86400秒,这里是减去86400秒;1767400000为帖子发布的时间戳,从时间戳的前五位数17674开始减去一天的时间,如发布的帖子为1月5日,减去一天的时间86400秒,最终效果则帖子变更为1月4日发布)
3. 更新板块统计信息
Discuz! 板块最新回复时间和作者存储在 pre_forum_forum 中,需要同步更新:
  1. UPDATE pre_forum_forum f
  2. JOIN (
  3.     SELECT fid, MAX(lastpost) AS max_lastpost, MAX(lastposter) AS max_lastposter
  4.     FROM pre_forum_thread
  5.     GROUP BY fid
  6. ) t ON f.fid = t.fid
  7. SET f.lastpost = t.max_lastpost,
  8.     f.lastposter = t.max_lastposter;
复制代码
4. 清理缓存
Discuz! 会将数据缓存到 pre_common_cache 中,需要清空相关缓存:
  1. DELETE FROM pre_common_cache WHERE cname LIKE 'forum_%';
  2. DELETE FROM pre_common_cache WHERE cname LIKE 'thread_%';
复制代码
5. 验证结果
执行完以上步骤后,可以查看:
  1. SELECT * FROM pre_forum_thread WHERE dateline BETWEEN 1767300000 AND 1767399999;
  2. SELECT * FROM pre_forum_post WHERE dateline BETWEEN 1767300000 AND 1767399999;
复制代码
确认时间戳已调整,并且前端能正常显示。
总结:
不要直接用字符串替换改时间戳,Discuz! 是基于 Unix 时间戳做运算的,直接减 86400 更安全
必须同步更新关联表(pre_forum_forum)和清理缓存,否则前端调用会失败。
这样修改后,Discuz! 前端会正常显示和排序。
返回顶部