質問
請求書番号を形式で作成する必要があります。
CONSTANT_STRING/%d/mm/yyyy
mm-月(2桁)yyyy-年
今、 %d 特定の月の請求書の数です。別の言葉では、この数は毎月リセットされています。
今、私はデータベースをチェックして、今月の最高の数字は何ですか。その後、その増加後、私は列を保存しています。
ユニークになるには整数が必要です。ただし、複製されていることがあります(2人のユーザーが同じ時間に保存されます)。
助言がありますか?
解決
フィールドに一意のインデックスを置き、2番目のインスタンスを保存しようとするときにデータベースエラーをキャッチします。また、最後の可能な瞬間まで価値を取得することを延期します。
他のヒント
1つの解決策はです SELECT ... FOR UPDATE
, 、それを更新するまで行をブロックしますが、Seriosマルチタスクアプリケーションでデッドロックを引き起こす可能性があります。
最良の方法は、数字を取得し、トランザクションでそれを増やして、作業を開始することです。これにより、行は長くロックされていません。
調べてください BEGIN WORK
と COMMIT
.
主キーを使用します(できれば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').'\'))';
所属していません StackOverflow