本帖最后由 mark35 于 2012-8-30 10:32 编辑
木毅子 发表于 2012-8-29 13:12 
就是无法直接清空,点击清空,显示0主题被清空,这些帖子还显示着,我用数据库清空了
这个问题从dz7就存在了,根本原因是你看到的垃圾箱中帖子数量不是统计 threadsmod/threadmod 这张表中总记录,而是统计threads主题表中的displayorder = -1的记录数量。这就会造成即便你清空了threadsmod表但依旧显示回收站不为空。
但是主题回收站查询代码偷懒没做连表查询,而是直接显示threadsmod,当然进去就看不到,严谨的SQL应该是类似这样(pgsql版本):
- $sql = "
- SELECT t.*, f.name AS forumname FROM
- (SELECT * FROM
- (SELECT DISTINCT ON (t.tid) t.tid, t.fid, t.authorid, t.author, t.subject, t.views, t.replies, t.dateline, t.lastpost, t.lastposter,
- tm.uid moduid, tm.username modusername, tm.dateline moddateline, tm.action modaction
- FROM {$tablepre}threads t
- LEFT JOIN {$tablepre}threadsmod tm ON tm.tid = t.tid
- WHERE t.displayorder='-1'
- ORDER BY t.tid DESC, moddateline DESC
- ) t
- ORDER BY moddateline DESC NULLS LAST, t.lastpost DESC, t.tid DESC LIMIT $lpp OFFSET $start_limit
- ) t
- LEFT JOIN {$tablepre}forums f ON f.fid = t.fid ORDER BY t.moddateline DESC NULLS LAST, t.lastpost DESC, t.tid DESC
- "; // 外层 moddateline 排序需要显式 NULLS LAST, 内层则不需要显式 NULLS LAST,因为有NOT NULL约束
复制代码
可以手工执行SQL,删除主题表中 displayorder为-1的主题 |