首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PHP中创建一个增加的ID号

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

Stack Overflow用户
提问于 2015-04-02 17:35:54
回答 5查看 2.7K关注 0票数 0

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

应该创建R-20150401-1 .

  1. R:固定字母
  2. 20150401:用碳法计算
  3. 1:依次增加的数目

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

这是我现在的代码

代码语言:javascript
复制
    public function generateTicketReferenceID() {
        $incidentTypeID = "R";
        $date = Carbon::now()->format('Ymd');
        $incidentID = 0;
        echo $incidentTypeID . "-" . $date . "-" . ++$incidentID;
    }
}

要回答评论中的问题:

  1. 规则是:将一个递增的数字从1..n添加到ID的末尾。
  2. 没有特定的数字或数字愤怒
  3. 不应该或不应该包含特定的字符。
  4. 数字应该是顺序的。
  5. 每个票据都是由POSTing生成的,它是一个表单,并执行一个写入数据库的函数。然后应该调用这个函数来生成ID。

我只是在想,如果一个票务系统从每天的ID开始,以及当不同的用户登录到系统时,是否是个好主意。因此,当应该创建ID R-001-20150401-1时,如何在以下条件下重置数字。

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

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-04-02 17:57:19

要实现这一点,您需要在数据库中创建自己的序列,其方式类似于自动增量的工作方式。普通的自动售货机总是在顺序上出现空白,这是不可避免的。在英国,根据法律,增值税发票号码必须是连续的。这样就不会有税务欺诈的问题。在面对这一挑战时,我使用以下过程。

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

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

票数 1
EN

Stack Overflow用户

发布于 2015-04-02 17:39:57

您将需要一种方法来知道以前的id是否存在,以及它是什么,以生成一个增量ID。

票数 1
EN

Stack Overflow用户

发布于 2015-04-02 17:44:48

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

每次要打印事件ID时,都要从SQL行生成它:"R-“+ id + date。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29419070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档