我想创建一个唯一的结算标识符/号码。我希望它是一个常量字符串,年份和一个额外数字的组合。例如“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。我有没有办法一次性做到这一点?
答案 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