ユーザーの購入が保存されたデータベースの自動インクリメントIDを持つテーブルの整数から請求書番号を生成する必要があります。
テーブル請求書データベースの例:
請求書番号形式のフロアは、2つの方法のいずれかを実行します。
例1:プレフィックスのない請求書の数:
0000001 | 0000002 | 0000003 | 0000004 | 0000005
例2:プレフィックス付きの請求書の数:
F-0000001 | F-0000002 | F-0000003 | F-0000004 | F-0000005
質問:
1)thisこれを行う最良の方法は何ですか?MySQLまたはPHPから直接実行できますか?
2)Example最も適切なフォーマットの例1または例2は何ですか?
いつも応援よろしくお願いします!
Gordon Linoff のおかげで、これを解決する方法を得ることができました。
私は例を共有します、おそらく誰かが興味があるかもしれません。
SQL-プレフィックスのない請求書:SELECT id, LPAD(id,7,'0') FROM invoice WHERE id = 1;
結果:0000001
SQL-プレフィックス付きの請求書:SELECT id, CONCAT( 'F-', LPAD(id,7,'0') ) FROM invoice;
結果:F-0000001
PHP)に適切なヘルパー関数を記述して、アプリケーションの請求書番号を返す場所で使用できます。次のヘルパー関数を使用すると、プロセスを簡略化できます。
function invoice_num ($input, $pad_len = 7, $prefix = null) {
if ($pad_len <= strlen($input))
trigger_error('<strong>$pad_len</strong> cannot be less than or equal to the length of <strong>$input</strong> to generate invoice number', E_USER_ERROR);
if (is_string($prefix))
return sprintf("%s%s", $prefix, str_pad($input, $pad_len, "0", STR_PAD_LEFT));
return str_pad($input, $pad_len, "0", STR_PAD_LEFT);
}
// Returns input with 7 zeros padded on the left
echo invoice_num(1); // Output: 0000001
// Returns input with 10 zeros padded
echo invoice_num(1, 10); // Output: 0000000001
// Returns input with prefixed F- along with 7 zeros padded
echo invoice_num(1, 7, "F-"); // Output: F-0000001
// Returns input with prefixed F- along with 10 zeros padded
echo invoice_num(1, 10, "F-"); // Output: F-0000000001
ヘルパー関数の記述が完了したら、クエリで毎回LPAD
またはCONCAT
MySQL関数を使用して、パディングゼロまたはプレフィックス付きゼロのIDを返す必要はありません。アプリケーション全体でヘルパー関数にグローバルにアクセスできる場合は、請求書番号を生成する場所に呼び出すだけです。
1-0000001 | 0000002 | 0000003 | 0000004 | 0000005
$ dbValue = 1; echo $ dbValue = str_pad($ dbValue、7、 "0"、STR_PAD_LEFT); // 0000001を返します;
2-F-0000001 | F-0000002 | F-0000003 | F-0000004 | F-0000005
$ dbValue = 1; echo $ dbValue = "F-"。str_pad($ dbValue、7、 "0"、STR_PAD_LEFT); // F-0000001を生成します;
データベースから最後のIDを取得し、PHP変数に格納します。
たとえば、最後のレコードが100
、次に1
。
$last = 100; // This is fetched from database
$last++;
$invoice_number = sprintf('%07d', $last);
最後に、2番目の質問に対する答えは、
$number = "F-". $number;
回答1):
これは、PHP(concat
を直接使用するか、str-pad
を使用)とMySQL(LPAD
)を使用して実行できます。
しかし、私の見解によれば、これはPHPで行う必要があるため、要件に応じて変更できます。 DB内のIDの数に応じてゼロを拡張します。SQLクエリを変更して重くならないようにします。
回答2):両方の形式を使用できますが、特定のユーザーやその他についてより具体的にしたい場合は、2番目の形式を使用します。
2番目の形式はデータに関する詳細情報を提供できると思います