0

我想创建一个唯一的帐单标识符/号码。我希望它是一个常量字符串、年份和一个附加数字的组合。例如“ABC-2013-100001”。我该怎么做才能确定帐单标识符是唯一的?我正在考虑维护一个 billing_id,比如一个唯一且自动递增的主键。然后我只需选择 max(billing_id) 以获取最后一个添加 1 和前缀“ABC-2013”​​,然后将其插入表中。问题是这是一个三步法。选择,做某事,插入。恐怕会发生类似情况,当 2 个用户同时执行此操作时,每个人都选择相同的数字,所以从技术上讲,他们插入了相同的标识符。我错了,反应过度还是这种生成独特的ID很常见?我应该采取不同的方法吗?

编辑

好的,所以我做了这样的事情:

$data = array(
    'billing_identifier' => 'law-'.$year."-".$this->db->insert_id()
);
// inserting into billing_identifiers
    $this->db->insert('billing_identifiers', $data);

    $bill_id = $this->db->insert_id();

但是 $this->db->insert_id() 在开头是 0 是有道理的,在调用插入函数之后它会得到最后一个 id。有没有办法一次性做到这一点?

4

3 回答 3

0

有一个用于获取最后插入的 ID 的 MySQL 函数,以及一个用例如零填充字符串的函数:

CONCAT(
    'ABC-2013-',
    LPAD(
         LAST_INSERT_ID()+1,
         6,
         '0'
    )
)

LAST_INSERT_ID()+1是当前插入的 id。

LPAD(str, length, pad)用零填充新 ID。

CONCAT(..., ...)将值组合成一个字符串。

将其插入帐单标识符列。

于 2013-07-10T07:50:08.300 回答
0

你也可以使用

strtime(d/y/m) time object

于 2013-07-10T09:42:22.037 回答
0

只需使用它,它就会为您提供主 ID。

<?php
$con=mysqli_connect("127.0.0.1","user","pass","db");
//query here
$id = mysqli_insert_id($con);

$bill_id = 'ABC-2013-'. $id;

?>

因为“不符合问题”而改变......

于 2013-07-10T07:44:42.190 回答