如何生成发票号(PHP)这样的唯一增量id

如何生成发票号(PHP)这样的唯一增量id,php,mysql,Php,Mysql,请说明如何生成在创建新发票时递增的唯一id。 例如,我有一张id为NR20200001的发票,因此创建id的下一张发票应该是NR20200002 这是我下面的代码,我似乎无法增加我生成的唯一id,所以我只是随机生成它,但我需要以增量方式生成它 <?php $qry = "SELECT * from requisitions order by req_id desc"; $result = mysqli_query($connection, $qry);

请说明如何生成在创建新发票时递增的唯一id。 例如,我有一张id为NR20200001的发票,因此创建id的下一张发票应该是NR20200002

这是我下面的代码,我似乎无法增加我生成的唯一id,所以我只是随机生成它,但我需要以增量方式生成它

<?php 
    $qry = "SELECT * from requisitions order by req_id desc";
    $result = mysqli_query($connection, $qry);
    $row    = mysqli_fetch_array($result);
    $lastid = $row['req_id'];

    if($lastid == ""){
        $number = "NR".date("Y").date("s");
    }
    else{
        $length=2;
        $number = substr($lastid,4);
        $number = intval($number);
        $number = "NR".date("Y").date("s").substr(str_shuffle(str_repeat($x='0123456789',ceil($length/strlen($x)))),1,$length);
    }
?>

请检查代码中的增量编号

6) ? $lastid:substr('00000000'.$lastid,-6); $getValue=“NR”。日期(“Y”)。日期(“s”)。$getValue; }
首先,您应该将请求id设置为主键,并在数据库上自动递增

其次,为仅获取最新的请求id添加限制1:

$qry = "SELECT * from requisitions order by req_id desc LIMIT 1";
接下来,改变条件如下:

<?php 
$qry = "SELECT * from requisitions order by req_id desc LIMIT 1";
$result = mysqli_query($connection, $qry);
$row    = mysqli_fetch_array($result);

if($row['req_id'] == "" || $row['req_id'] == null)
{
  $lastid = 0;
}
else
{
  $lastid = $row['req_id'];
}

  $nextid = sprintf("%04d", $lastid+1);  //set to 4 digit
  $number = "NR".date("Y").$nextid;

?>


注意:不要从表中删除记录,因为它将生成重复的发票号。您应该为active/inactive添加字段标志。

听起来像是序列生成器的作业。如果您从未计划删除任何记录,则此处的自动递增列应该可以。。如果您希望将格式保留在前一年,则必须创建一个cronjob,以便在每年1月1日将当前自动增量列设置为
0001
。只需使用数据库中的自动增量字段即可。它保证每次插入新行时都会返回一个唯一的ID。顺序是不相关的,重要的是您可以唯一地标识记录。你也不需要“NR”文本,尽管我想你可以在屏幕上显示时在ID前面加上它,如果你觉得它在某种程度上很重要的话(即使它实际上完全没有意义)。@Akina可能不需要。在这种情况下,我们正在向他们解释——或者无论如何尝试解释。没有必要给他们一个采用错误方法的解决方案。谢谢,它工作了,但在提交数据后,它只接受int值,比如在提交NR20200023之后,我的申请表只接受23