web-dev-qa-db-ja.com

PHP&MySQL-データベースから整数から請求書番号を生成します

ユーザーの購入が保存されたデータベースの自動インクリメントIDを持つテーブルの整数から請求書番号を生成する必要があります。

テーブル請求書データベースの例:

enter image description here

請求書番号形式のフロアは、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

10

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を返す必要はありません。アプリケーション全体でヘルパー関数にグローバルにアクセスできる場合は、請求書番号を生成する場所に呼び出すだけです。

7
Wolverine

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を生成します;

5
Sapan Mohanty

データベースから最後のIDを取得し、PHP変数に格納します。

たとえば、最後のレコードが100、次に1

$last = 100; // This is fetched from database
$last++;
$invoice_number = sprintf('%07d', $last);

最後に、2番目の質問に対する答えは、

$number = "F-". $number;
5
LOKESH

回答1):

これは、PHP(concatを直接使用するか、str-padを使用)とMySQL(LPAD)を使用して実行できます。

しかし、私の見解によれば、これはPHPで行う必要があるため、要件に応じて変更できます。 DB内のIDの数に応じてゼロを拡張します。SQLクエリを変更して重くならないようにします。

回答2):両方の形式を使用できますが、特定のユーザーやその他についてより具体的にしたい場合は、2番目の形式を使用します。

2番目の形式はデータに関する詳細情報を提供できると思います

2
Abbas