#php
#php
Вопрос:
У меня есть столбец в моей базе данных номер сотрудника и данные, которые являются ACZ2020000. Когда я добавляю сотрудника, сгенерированный номер сотрудника — ACZ2020002. Как я могу сгенерировать ACZ2020001? Помогите мне, пожалуйста. Большое спасибо, ребята.
Это то, что я сделал:
public function generate_employee_id() {
$query = $this->db->query("SELECT COUNT(*) AS num_rows FROM tbl_accounts");
$row = $query->fetch_object();
$number = $row->num_rows;
$number;
$len = strlen($number);
for($i = $len; $i < 3; $i) {
$number = '0' . $number;
}
$employee_number = 'ACZ'. date("Y") . $number;
echo json_encode(['employee_number' => $employee_number]);
}
Ответ №1:
Вам нужно наибольшее число, которое не имеет ничего общего с количеством строк. Если я понял правила, вы можете сделать это, чтобы получить уже используемые числа:
SELECT employee_id, CAST(SUBSTR(employee_id, 5) AS signed) -- MySQL flavour
FROM tbl_accounts
WHERE employee_id LIKE 'ACZ20%'
… и старый добрый MAX()
, чтобы захватить последнюю:
SELECT MAX(CAST(SUBSTR(employee_id, 5) AS SIGNED)) 1 AS next
FROM tbl_accounts
WHERE employee_id LIKE 'ACZ20%'
Сказал, что остерегайтесь потенциальных проблем, вызванных одновременным доступом!
Комментарии:
1. Спасибо за это! Но номер сотрудника, который я получил, похож на этот ACZ202020001. Я хочу, чтобы номер сотрудника был таким: ACZ2020001. Любая помощь?
2. 5 в substr() — это начальные символы, которые нужно пропустить (длина
ACZ20
). Просто настройте соответствующим образом полные 4-значные годы.
Ответ №2:
Возможно, лучшим ответом здесь было бы рекомендовать не пытаться управлять порядковым номером сотрудника из вашего PHP-приложения. Вместо этого позвольте вашей базе данных выполнять эту тяжелую работу с помощью столбца автоматического увеличения или чего-то подобного. Обратите внимание, что если все номера сотрудников предваряются ACZ
символом , то вам действительно нужен только способ генерации последовательности, и это то, что базы данных достаточно хорошо умеют делать.
Комментарии:
1. Это, безусловно, самый разумный подход. Он прост, надежен и также изящно справляется с удалением сотрудников (он не будет повторно использовать коды).