Php 创建由当前年份号和自动递增值组成的唯一ID
我想创建一个学生ID号,由4位数的年份和5位数的自动递增字段组成。示例:2013-00001,年底时,5位数字将重新开始为零(0)示例:2014-00001Php 创建由当前年份号和自动递增值组成的唯一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 =
谢谢,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都应该更大,因为每年>去年+附加增量。