Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 创建由当前年份号和自动递增值组成的唯一ID_Php_Mysql_Phpmyadmin - Fatal编程技术网

Php 创建由当前年份号和自动递增值组成的唯一ID

Php 创建由当前年份号和自动递增值组成的唯一ID,php,mysql,phpmyadmin,Php,Mysql,Phpmyadmin,我想创建一个学生ID号,由4位数的年份和5位数的自动递增字段组成。示例:2013-00001,年底时,5位数字将重新开始为零(0)示例:2014-00001 谢谢,Metta您可以使用StudentId表本身来存储所有数据 create Table width two columns: Year,LatestNumber function generateStudentId(){ $year = date("Y"); $latestNumber = 0; $res =

我想创建一个学生ID号,由4位数的年份和5位数的自动递增字段组成。示例:2013-00001,年底时,5位数字将重新开始为零(0)示例:2014-00001


谢谢,Metta

您可以使用StudentId表本身来存储所有数据

create Table width two columns: Year,LatestNumber 

function generateStudentId(){
    $year = date("Y");
    $latestNumber = 0;
    $res = mysql_query("select * from myTable where Year=$year");
    $result = mysql_fetch_array($res);
    if($result)
        $latestNumber = $result['LatestNumber'];
    $latestNumber++;
    if($result){
        mysql_query("update myTable set LatestNumber=$latestNumber where Year=$year");
    }
    else
        mysql_query("insert into myTable values($year,$latestNumber)");

    $fiveDigitNumber = return str_pad((int) $latestNumber,5,"0",STR_PAD_LEFT);
    $studentId = $year.$fiveDigitNumber;
    return $studentId;
}
select LatestNumber from StudentIds where Year=2013 ORDER BY LatestNumber DESC LIMIT 1;
将数字与年份分开,以便您可以在新的一年中通过添加虚拟年份=2014,LatestNumber=0来重置它

$LatestNumber = $result['LatestNumber'];
$LatestNumber++;

insert into StudentIds (Year, LatestNumber, ...) values (2013, $LastestNumber, ...)

在多个查询等情况下添加错误处理。

使用MyISAM引擎,您可以轻松完成这项工作。对于InnoDB,没有。问题是MyISAM不支持外键…使用InnoDB可能吗?您应该使用触发器。为该年创建一个子表,ID列为自动递增(Year2013,然后ID为自动)(Year2014,然后ID为自动)将为您提供数字并将其隔离,但我不确定这是你真正想做的。这是最简单的方法吗?这就是我想到的方法。可能有更好的解决办法。我现在想不出有什么能不能
Max('LatestNumber')
达到与额外表格相同的效果?我们每年最多只有一行。正如您所见,LatestNumber将每年更新一次,因此Max(“LatestNumber”)在这里没有任何用处。我的意思是删除不断更新的新表,并在myTable上使用Max。可能会替换-但是ID都应该更大,因为每年>去年+附加增量。