最近被这样的事困扰,我原来合并论坛的时候,有两个相同的admin帐户,因为是相同的,程序自动命名其中一个为admin_2。
我看到后就删掉了,但是没有删掉该用户下的帖子。
但是后来发现用户删掉了,帖子就被屏蔽了。
于是我就找办法,首先在DZ官方论坛问,可惜没人可以帮我。
不过还好有位兄弟叫我找那个谁来着,说可以用SQL语句。
一语惊醒梦中人啊,虽然我SQL不熟,但是可以试试,我找到这篇文章:http://www.muent.com/a/programs/bbs/201005017002.html
原文是这样的:
昨天,一不小心的失误,导致了很多帖子的authorid变动,使得变动后的帖子显示“xx 该用户已被删除”的提示。 原因是把x替换成xxxx导致的,于是立即把xxxx替换回x,结果依然只解决了部分帖子,郁闷。 于是查原因。 原来,那些异常的帖子的 cdb_posts.authorid和cdb_threads.authorid都变成了16777215,可能是我几经替换后,该项值达到了最大值,所以都变成了这个。 那至少好办些了,凡是authorid为166777215的帖子和主题都是不正常帖子。 突然想到小小宇的QQ农场用户迁移的方法,结果尝试下来,不行。 他的MySQL和PHP的语句都是错误的。 看来只有整理思路,另寻他法了。 =============================================== 思路:列出所有 authorid为16777215的帖子和主题,用与cdb_posts.author相同的cdb_members.username对应的 cdb_members.uid替换cdb_posts.authorid和cdb_threads.authorid 历经千辛万苦,还用了join的MySQL语句,终于学会了如何处理。 首先,要验证自己的语句是否正确,那么用SELECT检验一下:SELECT cdb_members.uid,cdb_members.username,cdb_posts.tid,cdb_posts.pid,cdb_posts.author,cdb_posts.authorid FROM (cdb_members,cdb_posts) WHERE cdb_posts.authorid=16777215 and cdb_posts.author=cdb_members.username and cdb_posts.tid=242950 解说:从 cdb_members和cdb_posts列出 cdb_members.uid,cdb_members.username,cdb_posts.tid,cdb_posts.pid,cdb_posts.author,cdb_posts.authorid ,并且满足cdb_posts.authorid=16777215的条件,且 cdb_posts.author=cdb_members.username一一对应(相同)。为了以防万一并减少查询时间,加上 cdb_posts.tid=242950这个条件。 看了下结果,是对的,且用户名一一对应(uid与authorid不对应)。 然后又费尽心思,终于找到了如何更改authorid=uid的方法。 单独修复某一个会员的帖子的方法://单独的恢复方式 作者和作者ID要填对 如下例子 UPDATE cdb_posts set authorid=61620 WHERE authorid=16777215 and author='purlada' 解说:把cdb_posts中authorid为 16777215且作者是purlada的帖子的authorid替换成61620(purlada的uid) 批量修复所有显示“该用户已被删除”的帖子的方法://批量恢复方式 自动查询cdb_members表中的uid匹配到cdb_posts表中的authorid上,前提是 db_posts.author=cdb_members.username就是说用户名必须相同,以免错匹配。去掉最后的and是不限主题,也就是全部恢复。 update cdb_posts,cdb_members set cdb_posts.authorid=cdb_members.uid WHERE cdb_posts.authorid=16777215 and cdb_posts.author=cdb_members.username and cdb_posts.tid=242950 update cdb_threads,cdb_members set cdb_threads.authorid=cdb_members.uid WHERE cdb_threads.authorid=16777215 and cdb_threads.author=cdb_members.username and cdb_threads.tid=242950 解说:关键在cdb_posts.author=cdb_members.username这里,这是为了保证两者对应的情况下用uid替换 authorid 终于,恢复了。 但是还有一个问题,就是:如果一些用户被删除了,也就是说某些用户在cdb_members 里面不存在了,但他的帖子并未删除,那么这些帖子是恢复不了的。当然,这无伤大雅。 教训:无论如何,操作数据库要先备份,哪怕搞定了以后再删除。
从中受到启发,被屏蔽的帖子的用户名还是admin不需要修改了
而authorid不一样,所以我直接把authorid修改掉就好了。
于是用这样的SQL语句:
update pre_forum_post set pre_forum_post.authorid=1 WHERE pre_forum_post.authorid=197
不过得先备份数据库,万一不对就惨了。非同小可啊!
不过好在本人比较走运。搞定了!
声明:本文采用 BY-NC-SA 协议进行授权,如无注明均为原创,转载请注明转自 你好!刘
本文地址:DX1 提示“该用户已被删除”解决方法
本文地址:DX1 提示“该用户已被删除”解决方法
发表评论