在PHP中创建一个不断增加的ID号

时间:2015-04-02 17:35:55

标签: php

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

应该创建

R-20150401-1

  1. R:固定字母
  2. 20150401:按碳法计算
  3. 1:顺序增加数字
  4. 我已经获得了前两个组件。但越来越多的人仍然是一个问题。将在表单中生成票证,我不想限制可以生成的票证数量。因此,我认为for循环没有意义。

    这是我现在的代码

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

    回答评论中的问题:

    1. 规则是:将1..n中的递增数字附加到ID的末尾。
    2. 没有特定数字或数字愤怒
    3. 没有应该或应该包含的某些字符
    4. 数字应该是连续的。
    5. 通过POST表单并执行写入数据库的函数来生成每个票证。然后应调用此函数以生成ID。
    6. 我只是想在票证系统每天重新开始使用ID以及其他用户登录系统时是否是一个好主意。那么如果这是我的ID,我怎么能在以下条件下重置数字 R-001-20150401-1 应该被创建。

      1. 001:用户登录系统。当此号码更改时,应重置ID。
      2. ID每天重置

5 个答案:

答案 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)