PHP & MySQL - 从数据库中的整数生成发票编号
PHP & MySQL - Generate invoice number from an integer from the database
我需要从 table 的整数生成一个发票编号,其中包含用户购买保存的数据库的自动递增 ID。
table 发票数据库示例:
发票号格式楼做两种方式之一。
例1:不带前缀的发票数量:
0000001 |
0000002|
0000003 |
0000004 |
0000005
例2:带前缀的发票数量:
F-0000001 |
F-0000002 |
F-0000003 |
F-0000004 |
F-0000005
问题:
1) ¿最好的方法是什么,您可以直接从 MySQL 或 PHP?
2) ¿哪种格式最适合示例 1 或示例 2?
感谢您一如既往的支持!
从数据库中获取最后一个 ID 并将其存储在 PHP 变量中。
例如,如果最后一条记录是 100
,则将其递增 1
。
$last = 100; // This is fetched from database
$last++;
$invoice_number = sprintf('%07d', $last);
最后,第二个问题的答案是,
$number = "F-". $number;
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;
答案 1):
您可以使用 PHP(直接通过 concat
或使用 str-pad
)以及 MySQL( LPAD
)也可以
但根据我的看法,您应该在 PHP 之前完成此操作,以便您可以根据您的要求进行更改,例如根据 DB.So 中的 id 数量扩展零,不会更改 SQL 查询并使其变重。
答案 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 中编写一个很好的辅助函数,以便在应用程序中的任何地方使用它来 return 发票编号。以下辅助函数可以简化您的过程。
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
完成辅助函数的编写后,您无需在每次查询 return ID 时都使用 LPAD
或 CONCAT
MySQL 函数填充零或带前缀的零。如果您可以在整个应用程序中全局访问辅助函数,则只需在需要生成发票编号的任何地方调用它即可。
我需要从 table 的整数生成一个发票编号,其中包含用户购买保存的数据库的自动递增 ID。
table 发票数据库示例:
发票号格式楼做两种方式之一。
例1:不带前缀的发票数量:
0000001 | 0000002| 0000003 | 0000004 | 0000005
例2:带前缀的发票数量:
F-0000001 | F-0000002 | F-0000003 | F-0000004 | F-0000005
问题:
1) ¿最好的方法是什么,您可以直接从 MySQL 或 PHP?
2) ¿哪种格式最适合示例 1 或示例 2?
感谢您一如既往的支持!
从数据库中获取最后一个 ID 并将其存储在 PHP 变量中。
例如,如果最后一条记录是 100
,则将其递增 1
。
$last = 100; // This is fetched from database
$last++;
$invoice_number = sprintf('%07d', $last);
最后,第二个问题的答案是,
$number = "F-". $number;
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;
答案 1):
您可以使用 PHP(直接通过 concat
或使用 str-pad
)以及 MySQL( LPAD
)也可以
但根据我的看法,您应该在 PHP 之前完成此操作,以便您可以根据您的要求进行更改,例如根据 DB.So 中的 id 数量扩展零,不会更改 SQL 查询并使其变重。
答案 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 中编写一个很好的辅助函数,以便在应用程序中的任何地方使用它来 return 发票编号。以下辅助函数可以简化您的过程。
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
完成辅助函数的编写后,您无需在每次查询 return ID 时都使用 LPAD
或 CONCAT
MySQL 函数填充零或带前缀的零。如果您可以在整个应用程序中全局访问辅助函数,则只需在需要生成发票编号的任何地方调用它即可。