質問

請求書番号を形式で作成する必要があります。

CONSTANT_STRING/%d/mm/yyyy

mm-月(2桁)yyyy-年

今、 %d 特定の月の請求書の数です。別の言葉では、この数は毎月リセットされています。

今、私はデータベースをチェックして、今月の最高の数字は何ですか。その後、その増加後、私は列を保存しています。

ユニークになるには整数が必要です。ただし、複製されていることがあります(2人のユーザーが同じ時間に保存されます)。

助言がありますか?

役に立ちましたか?

解決

フィールドに一意のインデックスを置き、2番目のインスタンスを保存しようとするときにデータベースエラーをキャッチします。また、最後の可能な瞬間まで価値を取得することを延期します。

他のヒント

1つの解決策はです SELECT ... FOR UPDATE, 、それを更新するまで行をブロックしますが、Seriosマルチタスクアプリケーションでデッドロックを引き起こす可能性があります。

最良の方法は、数字を取得し、トランザクションでそれを増やして、作業を開始することです。これにより、行は長くロックされていません。

調べてください BEGIN WORKCOMMIT.

主キーを使用します(できればan INT)請求書のテーブルまたは各請求書に一意の番号を割り当てます。例: uniqid.

詩使用している場合 uniqid, 、あなたは増やすことができます 独自性 設定することにより more_entropy パラメーターに true.

IDをすべて1つのクエリに設定します。

$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').'\'))';
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top