本帖最后由 lusir 于 2013-7-16 22:07 编辑
楼层错误问题好烦人。
经分析,发现在 pre_forum_post中有两个主键,一个是Tid,一个position。可能是升级没有处理好,导致Position中的值不正确。观看如下结果: SELECTpid,fid,tid,first,,dateline,FROM_UNIXTIME(dateline) as sj,position FROM `pre_forum_post`where tid=155346 order by dateline; 发现,可以按时间升序排列来修正此错误。 因此可以做如下简单处理以解决楼层错乱问题 1、后台关闭网站,以防在处理期间有人发帖子。 2、修改表中关键字,将Position的主键和自动增长取消。保存。 3、执行如下程序: <?php @set_time_limit(0); //connection to db $mysql_server_name='localhost'; $mysql_username='root'; //改成自己的用户名 $mysql_password='12345678'; //改成自己的密码 $mysql_database='dbname'; //改成自己的数据库名字 $conn=mysql_connect($mysql_server_name,$mysql_username,$mysql_password); mysql_select_db($mysql_database,$conn); $table_name="pre_forum_post"; //改成自己的数据表名称
//to correct the error on floors in topics $sql = "SELECT tid FROM $table_nameWHERE first=1 AND position>1"; $result=mysql_query($sql,$conn); while ($row=mysql_fetch_array($result)) { $n=1; $sql="selectpid from $table_name where tid=" . $row["tid"] . " order bydateline asc"; $rs=mysql_query($sql,$conn); while($r=mysql_fetch_array($rs)) { $sql="update $table_name setposition=" . $n . " where pid=" . $r["pid"]; mysql_query($sql); $n++; }//end while $r mysql_free_result($rs); } // end while $row echo "<br>done with records:" . mysql_num_rows($result); mysql_free_result($result); mysql_close($conn); ?>
楼层错误数量多的,可以分批执行。 水平有限,程序执行效率不高,希望大能来指导。
4、恢复数据表Pre_forum_post中Position为主键、自增
刷新有问题的页面,发现已解决。
以上方案,仅供参考。
可以确认是官方升级文件存在Bug。希望官方能及早给出更好的解决方案。
|