如何使用PHP或MySql生成具有特殊要求的发票号

Rus*_*ces -2 php mysql

如何生成发票号如下:

Invoice Number = MC1200001 

MC : Company name
12 : current year (Flexibel)
00001 : auto increment (Flexibel - auto increment and will reset to 00001 again if year is 2013)
Run Code Online (Sandbox Code Playgroud)

预期结果 :

current year 2012 :

MC1200001
MC1200002
MC1200003
.....

year 2013

MC1300001
MC1300002
MC1300003
.....
Run Code Online (Sandbox Code Playgroud)

需要你的想法或解决这个问题的方法.

谢谢.

Kri*_*ris 5

您可以使用三列来表示数字的不同部分,并使用视图或简单的CONCAT表达式来获取每张发票的整个数字.

然后,要获得一个新数字,您将使用一个函数插入一个记录,该函数将返回实际的行ID或连接数.

我会做这样的事情:(为了简洁而留下领先的零)

DROP TABLE IF EXISTS invoces;

CREATE TABLE invoices (
   id INT NOT NULL UNIQUE AUTO_INCREMENT
  ,company CHAR(2)
  ,number INT
  ,fiscal_year INT
 , PRIMARY KEY (company, number, fiscal_year)
);

DROP PROCEDURE IF EXISTS spCreateInvoice;
DELIMITER $$

CREATE PROCEDURE spCreateInvoice
(
   pCompany CHAR(2)
  ,pFiscalYear INT
)
BEGIN
  INSERT INTO invoices (
    company, fiscal_year, number
  ) SELECT
        pCompany
      , pFiscalYear
      , 1+MAX(number) 
    FROM invoices 
    WHERE 
        fiscal_year=pFiscalYear;

  SET @id = LAST_INSERT_ID();

  SELECT CONCAT(i.company, i.number, i.fiscal_year) invoice_number, i.* from invoices i WHERE id = @id;
END;
$$
DELIMITER ;

CALL spCreateInvoice('MC', 12);
CALL spCreateInvoice('MC', 12);
CALL spCreateInvoice('MC', 12);
CALL spCreateInvoice('MC', 12);

CALL spCreateInvoice('MC', 13);
CALL spCreateInvoice('MC', 13);
CALL spCreateInvoice('MC', 13);
CALL spCreateInvoice('MC', 13);
Run Code Online (Sandbox Code Playgroud)

您可以将其作为针对mysql测试数据库的脚本运行,并查看以下输出:

invoice_number  id  company number  fiscal_year
MC012           1   MC      0       12

invoice_number  id  company number  fiscal_year
MC112           2   MC      1       12

invoice_number  id  company number  fiscal_year
MC212           3   MC      2       12

invoice_number  id  company number  fiscal_year
MC312           4   MC      3       12

invoice_number  id  company number  fiscal_year
MC013           5   MC      0       13

invoice_number  id  company number  fiscal_year
MC113           6   MC      1       13

invoice_number  id  company number  fiscal_year
MC213           7   MC      2       13

invoice_number  id  company number  fiscal_year
MC313           8   MC          3   13
Run Code Online (Sandbox Code Playgroud)