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