本月的唯一凭证编号

时间:2011-01-17 18:02:13

标签: php mysql invoice

我需要以格式创建发票号码:

CONSTANT_STRING/%d/mm/yyyy

mm - 月(两位数) yyyy - 年

现在,%d 是特定月份的发票编号。换句话说,这个数字每个月都要重置一次。

现在我正在检查数据库中当前月份的最高数字。然后在增加之后我将保存该行。

我需要整数才是唯一的。但是,它有时会被复制(两个用户同时保存)。

有什么建议吗?

4 个答案:

答案 0 :(得分:2)

在字段上放置一个唯一索引,并在尝试保存第二个实例时捕获数据库错误。此外,将值推迟到最后一刻。

答案 1 :(得分:1)

一个解决方案是SELECT ... FOR UPDATE,它会阻止该行,直到您更新它,但可能导致严重多任务应用程序死锁。

最好的方法是获取数字并在事务中递增它,然后开始工作。 这样,行就不会长时间锁定。

查看BEGIN WORKCOMMIT

答案 2 :(得分:0)

使用发票表的主键(最好是INT)或为每张发票分配一个唯一的号码,例如:通过uniqid

PS。如果您使用的是uniqid,则可以通过将more_entropy参数设置为true来增加唯一性

答案 3 :(得分:0)

在一个查询中设置id all。

$query = 'INSERT INTO table (invoice_number) VALUES (CONCAT(\''.CONSTANT.'\', \'/\', (SELECT COUNT(*) + 1 AS current_id FROM table WHERE MONTH(entry_date) = \''.date('n').'\' AND YEAR(entry_date) = \''.date('Y').'\'), \'/\', \''.date('m/Y').'\'))';