2

予約システム用の請求書モジュールを作成しました。

そのため、新しい請求書を作成すると、MySQL を介して主キーが自動的に生成されます。

ただし、現時点では単純な整数のカウントアップです。

問題は、「#year#id」の形式で請求書番号を取得する義務があることです。ここで、#year は 2013 などで、#id は毎年 1 から始まる ID です。

たとえば、20131、20132、20133、2014 年には 20141、20142 になります。

カスタム主キージェネレーターでこれを修正するにはどうすればよいですか?

4

3 に答える 3

2

プロシージャまたはトリガーを使用する必要があります。newInvoiceId を構築する特定のクエリは、次のようになります。

SELECT CONCAT(YEAR(now()),count(*)+1) as newInvoiceId
FROM table
WHERE InvoiceId like CONCAT(YEAR(now()),'%');

私が 100% 自信を持っていない唯一の部分は、CONCAT(YEAR(now()),'%')

于 2013-03-01T07:38:54.673 に答える
2

年とIDの2つのフィールドを作成できます。

id に auto_increment オプションを指定して、両方のフィールドで 1 つの主キーを作成します。年の一意の値ごとに、id がカウントアップされます。例えば:

2012    1
2012    2
2012    3
2013    1

SELECT CONCAT(year,id) AS primary FROM table を選択すると、それらを連結できます。

挿入は次のようになります。

INSERT INTO table SET year = YEAR(NOW())

id を指定する必要はありません。

于 2013-03-01T07:35:51.477 に答える
0

2012/01 のようなナイーブな年/週に対する警告。YEAR(NOW()) が間違っています。

より良い使用YEARWEEK(NOW())。201201 のような数値を与える

以下は、 year が必ずしも year-of-week-number ではないことを示しています。

mysql> SELECT YEARWEEK('1987-01-01');
       -> 198652

1 つの int で年と週を持つ残りの部分は、実際にはより簡単です。

int year = yearweek / 100;
int week = yearweek % 100;
于 2018-01-15T11:51:06.103 に答える