PHP & MySQL -生成自己的唯一引用

dsekswqp  于 2022-12-21  发布在  PHP
关注(0)|答案(3)|浏览(137)

我目前正在编码一个网络应用程序,我将需要创建报价和发票的唯一参考。
我想创建一个参考,其中包括年和月,然后参考编号。即YYYY-MM-001。
Web应用程序将是多租户的,多个用户将同时使用它。我关心的一个问题是,如果有多个用户同时执行同一请求,我如何生成引用而不同时复制它?
我处理这个问题的最佳方式是什么?
我正在使用PHP 8和MySQL数据库。

kqhtkvqz

kqhtkvqz1#

希望这对你有帮助。

1) echo strtotime(date("Y-m-d h:i:s")).'-YOUR_REFERENCE_NUMBER'; // O/P : 1671533979-YOUR_REFERENCE_NUMBER
2) echo date("Y-m-d_h-i-s").'-YOUR_REFERENCE_NUMBER'; // O/P : 2022-12-20_10-59-39-YOUR_REFERENCE_NUMBER
lyr7nygr

lyr7nygr2#

您可以使用主键id或任何唯一的列,然后不用担心数据的唯一性。使用该列/id生成唯一引用,如下所示:

update invoices
set reference = concat(date_format(now(), "%Y-%m-00"), unique_id)
where unique_id = 1;
6tdlim6h

6tdlim6h3#

如果你确定你不会有超过999报价/发票在一个月内,你可以做一些像下面...

CREATE TABLE quotes (
  id INT(14) NOT NULL AUTO_INCREMENT,
  YMFqid char(11) NOT NULL,
  PRIMARY KEY (id),
  UNIQUE KEY (YMFqid));

CREATE TABLE YMnext (
  YM char(7) NOT NULL,
  next INT(3) NOT NULL DEFAULT 0,
  PRIMARY KEY (YM));

然后,要获得下一个值,您需要一些查询,如...

SELECT next AS latest FROM YMnext WHERE YM = '2022-12';

INSERT INTO YMnext VALUES ('2022-12', 0);

UPDATE YMnext SET next = next + 1 WHERE YM = '2022-12' AND next = latest;

如果SELECT失败,则进行插入,否则进行更新,并检查是否更新了一行且仅更新了一行。如果一个月内的报价可能超过999个,则可以相应地更改列大小。

相关问题