我需要从一个表的整数生成一个发票号,其中包含用户购买的数据库的自动递增ID。
表发票数据库示例:
发票号格式格式有两种方式之一。
示例1:没有前缀的发票数量:
<00> 0000001 | 0000002 | 0000003 | 0000004 | 0000005示例2:带前缀的发票数量:
F-0000001 | F-0000002 | F-0000003 | F-0000004 | F-0000005
问题:
1)¿最好的方法是什么,你可以直接用MySQL或PHP做什么?
2)¿什么是最合适的格式示例1或示例2?
我一如既往地感谢您的支持!
答案 0 :(得分:9)
感谢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
答案 1 :(得分:4)
您可以在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。如果您可以在整个应用程序中全局访问帮助程序功能,则只需在要生成发票编号的任何地方调用它即可。
答案 2 :(得分:3)
从数据库中获取最后一个ID并将其存储在PHP变量中。
例如,如果上一条记录为100
,则按1
递增。
$last = 100; // This is fetched from database
$last++;
$invoice_number = sprintf('%07d', $last);
最后,第二个问题的答案是,
$number = "F-". $number;
答案 3 :(得分:3)
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;
答案 4 :(得分:1)
Ans 1):
您可以使用PHP(直接由concat
或使用str-pad
)以及MySQL(LPAD
)
但根据我的观点,您应该通过PHP执行此操作,以便您可以根据自己的要求进行更改,例如:根据DB中的id数量扩展零。所以不要改变SQL查询并使其变重。
Ans 2): 您可以使用这两种格式,但如果您想更具体地了解特定用户或其他任何内容,请使用第二种格式。
我认为第二种格式可以为您提供有关数据的更多信息