首页 > 解决方案 > 如果另一个表中存在重复项,则更改自动增量值

问题描述

我正在尝试为没有指定身份证件的申请人为学生注册过程生成一个临时 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 );

标签: phpmysqlauto-increment

解决方案


我建议您使用表作为唯一学生 ID 的自动增量和主键,如下所示

ALTER TABLE a_students
ADD PRIMARY KEY (nic);
ALTER TABLE a_students AUTO_INCREMENT = 1;

推荐阅读