解决Typecho文章cid、分类和标签mid不连续的问题

根据typecho的预设机制,创建的文章、页面和上传的附件都是需要占用cid的,当一篇文章有很多图片等附件的时候,就会同时占用很多的cid。导致下一次创建文章的时候,会自动跳过这些已占用的cid,导致文章的cid不连续。这对很多乐观派来说,问题不大。但是对于很多强迫症患者来说,这不是赤裸裸的浪费吗?明明我的站点只发布了几十篇文章,为什么占用我几百个cid?

强迫症患者的福音就是,我们可以通过修改数据库的方式让cid重新排序,在服务器上新建cid.php和mid.php并修改代码中的数据库对应的数据,并在浏览器地访问一下即可。

注意:这个方法只适用PHP7.0以下版本的服务器;因为涉及到修改数据库,开始之前需要做好数据库备份。

1、解决文章cid不连续的问题

文章cid重新排列后,上传的附件所属文章可能不正确,需手动修改。

<?php
/**
 * Typecho重新排列不连续的文章ID
 * 作者:http://blog.yuweiji.com/
 */

$hostname_blog = "localhost";
$database_blog = "数据库名";
$username_blog = "数据库用户名";
$password_blog = "数据库密码";
$blog = mysql_pconnect($hostname_blog, $username_blog, $password_blog) or trigger_error(mysql_error(),E_USER_ERROR); 

$no = 1;

function change_id($cid)
{
    global $no; 

    // 修改post cid,并修改分类、标签、自定义字段、评论的对应关系
    $sql = 'update typecho_contents set cid = ' . $no . ' where cid = ' . $cid;
    mysql_query($sql);
    $sql = 'update typecho_relationships set cid = ' . $no . ' where cid = ' . $cid;
    mysql_query($sql);
    $sql = 'update typecho_comments set cid = ' . $no . ' where cid = ' . $cid;
    mysql_query($sql);

    $no = $no + 1;
}

mysql_select_db($database_blog, $blog);
$query_postRecord = "SELECT cid FROM typecho_contents ORDER BY cid ASC";
$all_postRecord = mysql_query($query_postRecord);
$row_postRecord = mysql_fetch_assoc($all_postRecord);

do {
    change_id( $row_postRecord['cid'] );    
} while ($row_postRecord = mysql_fetch_assoc($all_postRecord));

// 重新设置post id自增起点
mysql_query('alter table typecho_contents AUTO_INCREMENT = ' . $no);
echo 'ok';
?>

2、解决分类和标签mid不连续的问题

分类和标签 mid 重新排列后,子分类所属父分类可能不正确,需手动修改,如无二级分类,可略过。

<?php
/**
 * Typecho重新排列分类和标签(meta)不连续的mid
 * 作者:http://blog.yuweiji.com/
 */

$hostname_blog = "localhost";
$database_blog = "数据库名";
$username_blog = "数据库用户名";
$password_blog = "数据库密码";
$blog = mysql_pconnect($hostname_blog, $username_blog, $password_blog) or trigger_error(mysql_error(),E_USER_ERROR); 

$no = 1;

function change_id($mid)
{
    global $no; 

    // 修改meta id,并修改分类、标签、自定义字段、评论的对应关系
    $sql = 'update typecho_metas set mid = ' . $no . ' where mid = ' . $mid;
    mysql_query($sql);
    $sql = 'update typecho_relationships set mid = ' . $no . ' where mid = ' . $mid;
    mysql_query($sql);

    $no = $no + 1;
}

mysql_select_db($database_blog, $blog);
$query_postRecord = "SELECT mid FROM typecho_metas ORDER BY mid ASC";
$all_postRecord = mysql_query($query_postRecord);
$row_postRecord = mysql_fetch_assoc($all_postRecord);

do {
    change_id( $row_postRecord['mid'] );    
} while ($row_postRecord = mysql_fetch_assoc($all_postRecord));

// 重新设置meta id自增起点
mysql_query('alter table typecho_metas AUTO_INCREMENT = ' . $no);
echo 'ok';
?>

感谢你长得这么好看,还看我的笔记!全文完!

Last modification:October 2nd, 2019 at 01:33 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment