PHP & amp; MySQL — генерирует номер счета из целого числа из базы данных

Мне нужно сгенерировать номер счета из целого числа таблицы с автоматически увеличивающимся идентификатором базы данных, в которой сохраняются покупки пользователя.

Пример базы данных таблицы счетов:

введите описание изображения здесь

Пол формата номера счета-фактуры выполняется одним из двух способов.

Пример 1: из числа счетов без префикса:

0000001 |
0000002 |
0000003 |
0000004 |
0000005

Пример 2: количество счетов с префиксами:

F-0000001 |
F-0000002 |
F-0000003 |
F-0000004 |
F-0000005

Вопрос:

1) ¿Какой лучший способ сделать это, вы можете сделать прямо из MySQL или PHP?

2) ¿Какой формат наиболее подходит для примера 1 или для примера 2?

Я ценю вашу поддержку, как всегда!

7

Решение

Благодаря Гордон Линофф, Я мог бы найти способ решить это.

Я поделюсь примером, возможно, кому-то может быть интересно.

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

9

Другие решения

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;

3

Получить последний идентификатор из базы данных и сохранить его в переменной PHP.

Например, если последняя запись 100затем увеличьте его на 1,

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

Наконец, ответ на второй вопрос:

$number = "F-". $number;
3

Вы можете написать хорошую вспомогательную функцию на 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 с нулями заполнения или нулями с префиксом. Если у вас есть глобальный доступ к вспомогательной функции во всем приложении, вам нужно вызывать ее только там, где вы хотите сгенерировать номер счета.

3

Ответ 1):

Вы можете сделать это с помощью PHP (напрямую concat или использовать str-pad ) а также с MySQL ( LPAD ) также

Но, на мой взгляд, вы должны сделать это с помощью PHP, чтобы вы могли изменить его в соответствии с вашими требованиями, например, расширить нули в соответствии с числом идентификаторов в DB. Так, чтобы не изменять запросы SQL и сделать его тяжелым.

Ответ 2):
Вы можете использовать оба формата, но если вы хотите быть более конкретным в отношении конкретного пользователя или чего-либо еще, используйте второй формат.

Я думаю, что второй формат может дать вам больше информации о данных

1
По вопросам рекламы [email protected]