在PHP中创建一个递增的ID号


Create an increasing ID number in PHP

我想写一个函数来为数据库中的条目生成ID。创建数据时,ID的格式为:

R-20150401-1应创建。

  1. R: 固定字母
  2. 20150401:采用碳法计算
  3. 1:按顺序递增的数字

我已经得到了前两个组件。但数量的增加对我来说仍然是一个问题。会有以表格形式生成的票证,我不想限制可以生成的票证数量。因此,我认为for循环没有意义。

这是我现在的代码

    public function generateTicketReferenceID() {
        $incidentTypeID = "R";
        $date = Carbon::now()->format('Ymd');
        $incidentID = 0;
        echo $incidentTypeID . "-" . $date . "-" . ++$incidentID;
    }
}

回答评论中的问题:

  1. 规则是:在ID的末尾附加一个从1..n开始递增的数字
  2. 没有特定的数字或数字愤怒
  3. 没有应包含或应包含的特定字符
  4. 数字应该是连续的
  5. 每个票证都是通过POST表单并执行一个函数写入数据库来生成的。然后应该调用此函数来生成ID

我只是在想,当不同的用户登录系统时,票务系统每天都用ID重新开始是否是个好主意。那么,当这是我的身份证时,我如何在以下条件下重置号码应创建R-001-2015-0401-1

  1. 001:用户登录系统。当这个号码改变时,应该重新设置ID
  2. ID每天重置

要实现这一点,您需要以类似于自动增量的方式在数据库中创建自己的序列。普通汽车公司最终总是会在序列中出现缺口,这是不可避免的。现在在英国,法律要求增值税发票号码必须连续。这样就不存在税务欺诈的问题。当面对这个挑战时,我使用以下流程。

创建一个表来保存最后发出的ID。只有一个字段和一行。当您需要新号码时:为READ和WRITE锁定表,确保事务隔离不允许其他进程读取该表。这取决于数据库和表类型。在php中将数字增加1。使用插入发票表中的新编号。然后使用新编号更新序列表。然后提交事务并释放锁。下一个过程也可以这样做。

https://dev.mysql.com/doc/refman/5.0/en/set-transaction.html

您需要一种方法来了解以前的ID是否存在,以及它是什么,以生成增量ID。

最好的方法是存储数字。您可以在文件中执行此操作,也可以创建一个名为incidentId的额外列。之后你可以添加

SELECT * FROM tablename ORDER BY incidentId DESC LIMIT 1

函数调用最后一个数字和+1。

在数据库中,将日期(时间戳)保存在一个字段中,并使一个自动递增的值作为主键。然后数据库将自动处理这一切。

每次你想打印事件ID时,你都会从SQL行生成它:"R-"+ID+日期。

您首先需要为X日期选择DB的最后一行。你(可以)做一些类似的事情:

$date = date("Ymd");
$query = $mysqli->prepare("SELECT * FROM tickets WHERE Date = ? ORDER BY id DESC LIMIT 1");
$query->bind_param("s", $date );
$query->execute();
$query->bind_result($id, $date);
if($query->num_rows !=0){
$query->fetch();
$ticketIdNumber = strstr((strstr($id,-),-);
}
else{
$ticketIdNumber = 0;
}
$incidentTypeID = "R";
$date = date('Ymd');
$ticketIdNumber++;
$newTicketId = $incidentTypeID . "-" . $date . "-" . $ticketIdNumber;

这将检查今天是否发生了事故。如果没有,它使其成为偶发事件1…如果有,它使它成为偶发事件(最后+1)