编辑
2026-04-01
undefined
00

目录

文章cid
分类标签mid

因为Typecho的机制,页面、附件都要占cid。而且点击一次创建文章cid就会增加一次,即使你没有书写内容,那个cid也被认为已经使用了,所以下一次生成的cid就会跳过那个,造成不连续。

虽然不影响什么,也无关紧要,但是对于有强迫症的人来说,真的是无法忍受,看到了非得给改一下不可。

特别提醒:请在PHP 7以上版本的服务器上执行。本操作涉及数据库,请提前做好备份工作。

文章cid

将以下代码保存为php文件并上传至网站根目录,在浏览器地址栏访问一下即可。

<?php /** * Typecho重新排列文章cid让他连续 */ // 设置数据库参数 $hostname_blog = "localhost"; $database_blog = "数据库名"; $username_blog = "数据库用户名"; $password_blog = "数据库密码"; // 连接到数据库 $blog = mysqli_connect($hostname_blog, $username_blog, $password_blog, $database_blog) or die(mysqli_connect_error()); // 设置计数器的初始值 $no = 1; // 定义一个函数来更新文章cid function change_id($cid) { global $no, $blog; // 更新文章cid,并更新与类别、标签、自定义字段和评论的关系 mysqli_query($blog, &quot;UPDATE typecho_contents SET cid = $no WHERE cid = $cid&quot;); mysqli_query($blog, &quot;UPDATE typecho_relationships SET cid = $no WHERE cid = $cid&quot;); mysqli_query($blog, &quot;UPDATE typecho_comments SET cid = $no WHERE cid = $cid&quot;); $no = $no + 1; } // 从数据库中选择所有文章cid,按其 cid 排序 $query_postRecord = "SELECT cid FROM typecho_contents ORDER BY cid ASC"; $result = mysqli_query($blog, $query_postRecord); // 循环浏览文章并更新其 cid while ($row = mysqli_fetch_assoc($result)) { change_id($row['cid']); } // 重置文章 cid 的自动递增值 mysqli_query($blog, "ALTER TABLE typecho_contents AUTO_INCREMENT = $no"); echo 'ok'; ?>

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

分类标签mid

将以下代码保存为php文件并上传至网站根目录,在浏览器地址栏访问一下即可。

<?php /** Typecho重新排列分类和标签(meta)不连续的mid */ // 数据库参数 $hostname_blog = "localhost"; $database_blog = "数据库名"; $username_blog = "数据库用户名"; $password_blog = "数据库密码"; $blog = new mysqli($hostname_blog, $username_blog, $password_blog, $database_blog); // 检查错误 if ($blog->connect_error) { trigger_error($blog->connect_error, E_USER_ERROR); } // 定义全局变量以跟踪“no”值 $no = 1; // 定义一个函数来更新 mid 及其关系 function change_id($mid) { global $no; global $blog; // 更新mid $sql = &quot;UPDATE typecho_metas SET mid = ? WHERE mid = ?&quot;; $stmt = $blog-&gt;prepare($sql); $stmt-&gt;bind_param(&quot;ii&quot;, $no, $mid); $stmt-&gt;execute(); // 更新关系 $sql = &quot;UPDATE typecho_relationships SET mid = ? WHERE mid = ?&quot;; $stmt = $blog-&gt;prepare($sql); $stmt-&gt;bind_param(&quot;ii&quot;, $no, $mid); $stmt-&gt;execute(); // 递增 no 值 $no++; } // 从数据库中获取所有mid $query_postRecord = "SELECT mid FROM typecho_metas ORDER BY mid ASC"; $all_postRecord = $blog->query($query_postRecord); // 循环遍历结果并调用 change_id() 函数 while ($row_postRecord = $all_postRecord->fetch_assoc()) { change_id($row_postRecord['mid']); } // 重置typecho_metas表的自动增量值 $blog->query("ALTER TABLE typecho_metas AUTO_INCREMENT = $no"); echo 'ok'; ?>

本文作者:a

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!