php - 如果另一个表中存在重复项,则更改自动增量值
问题描述
我正在尝试为没有指定身份证件的申请人为学生注册过程生成一个临时 ID。但是,在某些情况下,一些申请人使用了我们为官方临时 ID 号码生成选择的系列中的任意 ID 号码。
当我(通过c_nic
表格)创建一个临时 ID 时,我需要检查该 ID 是否已被申请人(在a_student
表格中)使用,如果是,则将该数字跳到 中的下一个数字c_nic
,依此类推。我正在使用auto_increment
临时 ID 表 ( c_nic
)
例如,当一个学生来注册并且他没有身份证号码时,我们将为他生成一个临时身份证。这将是c_nic
表中的 auto_increment。说,11001111。在发布此 ID 以供学生使用之前,我需要检查此 ID 是否已被其他学生误用。如果另一个学生使用11001111进行注册,我需要给当前学生下一个可用的 ID,可能是11001112或者如果也使用了 11001113等等。当新学生获得新的临时 ID 后,我需要调整c_nic
表中的 auto_inc 值,以便第二个新学生获得下一个可用的 ID 号。
a_students
我尝试使用以下代码,但即使表中已存在记录,auto_increment 也不会增加
$refid = mysqli_query($conn, "SELECT `AUTO_INCREMENT` AS id FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '".DB_NAME."' AND TABLE_NAME = 'c_nic'");
$refnum = mysqli_fetch_assoc($refid);
$ref = $refnum["id"];
$refnew = $refnum["id"]+1;
$chkduplicate = mysqli_query($conn, "SELECT nic FROM a_students WHERE nic='$ref'");
do {
$chkduplicate = mysqli_query($conn, "ALTER TABLE c_nic AUTO_INCREMENT = '$refnew'");
$refnew = $refnum["id"]+1;
echo '<br/>Ref: '.$ref;
echo '<br/>Ref New: '.$refnew;
}
while (mysqli_affected_rows($conn) >0 );
解决方案
我建议您使用表作为唯一学生 ID 的自动增量和主键,如下所示
ALTER TABLE a_students
ADD PRIMARY KEY (nic);
ALTER TABLE a_students AUTO_INCREMENT = 1;
推荐阅读
- android - ANDROID PIE 中的自定义通知声音问题
- javascript - 如何更改 docusaurus 浏览器选项卡文本以匹配当前页面
- c# - 如何根据数组的值打印星星?
- kubernetes - 关于分解由托管在 kubernetes 中的作业和服务组成的 IOT 应用程序的建议,以实现水平扩展
- docker - 将 git repo 克隆到 Dockerfile 中的非 root 用户文件夹
- bash - 是否有更优雅的方式来编写具有重叠(嵌套)替代方案的语句?
- rust - 可以在没有#[derive(Serialize)] 的情况下在枚举上实现/派生序列化吗?
- c++ - 为什么我们为 glfwCreateWindow 使用指针?- OpenGL
- javascript - 从另一个 JS 文件中导出方法
- django - 如何在特定时间通过 websocket 发送消息