创建唯一帐单标识符

时间:2013-07-10 07:36:39

标签: php mysql identifier

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

修改

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

$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是有意义的,在调用insert函数后它获得最后一个id。我有没有办法一次性做到这一点?

3 个答案:

答案 0 :(得分: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;

?>

由于“不符合问题”而改变了......

答案 1 :(得分:0)

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

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

LAST_INSERT_ID()+1是当前正在插入的ID。

LPAD(str, length, pad)在其前面用零填充新ID。

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

将其插入结算标识符列。

答案 2 :(得分:0)

您也可以使用

strtime(d/y/m) time object