Считывает последние данные и генерирует буквенно-цифровой номер сотрудника

#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. Это, безусловно, самый разумный подход. Он прост, надежен и также изящно справляется с удалением сотрудников (он не будет повторно использовать коды).