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 时都使用 LPADCONCAT MySQL 函数填充零或带前缀的零。如果您可以在整个应用程序中全局访问辅助函数,则只需在需要生成发票编号的任何地方调用它即可。