我想编写一个函数来为数据库中的条目生成ID。在创建数据时,格式为:
应该创建R-20150401-1 。
我已经获得了前两个组件。但越来越多的人仍然是一个问题。将在表单中生成票证,我不想限制可以生成的票证数量。因此,我认为for循环没有意义。
这是我现在的代码
public function generateTicketReferenceID() {
$incidentTypeID = "R";
$date = Carbon::now()->format('Ymd');
$incidentID = 0;
echo $incidentTypeID . "-" . $date . "-" . ++$incidentID;
}
}
回答评论中的问题:
我只是想在票证系统每天重新开始使用ID以及其他用户登录系统时是否是一个好主意。那么如果这是我的ID,我怎么能在以下条件下重置数字 R-001-20150401-1 应该被创建。
答案 0 :(得分:1)
您需要一种方法来了解先前的ID是否存在,以及它是什么,以生成增量ID。
答案 1 :(得分:1)
在数据库中,将日期(时间戳)保存在一个字段中,并将自动递增值作为主键。然后数据库将自动处理它。
每次要打印事件ID时,都会从SQL行生成事件ID:" R - " + id + date。
答案 2 :(得分:1)
最好的方法是存储号码。您可以在文件中执行此操作,也可以创建名为incidentId的额外列。之后你可以添加
SELECT * FROM tablename ORDER BY incidentId DESC LIMIT 1
调用最后一个数字的函数和+1。
答案 3 :(得分:1)
要实现此目的,您需要以与自动增量工作方式类似的方式在数据库中创建自己的序列。普通的autoincs总是会在序列中出现空白,这是不可避免的。现在在英国,增值税发票号码必须按照法律要求保持不变。这样就不存在税务欺诈的问题。面对这一挑战时,我使用以下过程。
创建一个表来保存最后发出的ID。只有一个字段和一行。 当您需要新号码时: 将表锁定为READ和WRITE,确保您的事务隔离不允许其他进程读取表。这取决于db和表类型。 在php中将数字增加1。 将插入中的新数字用于发票表。 然后使用新编号更新序列表。 然后提交事务并释放锁。 然后,下一个过程也可以这样做。
https://dev.mysql.com/doc/refman/5.0/en/set-transaction.html
答案 4 :(得分:0)
首先需要为X日期选择数据库的最后一行。你(可以)做类似的事情:
$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)