Я хочу создать пользовательскую комбинацию из имени, фамилии и номера [закрыт]

0

Теперь правило, которое мы запланировали, чтобы UID (уникальный номер участника/номер клиента) генерировался автоматически при каждой регистрации пользователя (создается учетная запись).

Правило, которое мы установили: FirstName LastName = FL+ 001 (число, связанное с этими двумя буквами в хронологическом порядке создания учетной записи), т.е. Обе буквы уникальны, и только если число повторяется, при увеличении числа.

например:

John Doe - JD001
John Denver - JD002
Jane Foster - JF001
Bob Bilkins - BB001
Bill Graham - BG001
  • 0
    У вас есть конкретные проблемы в достижении этого? Что вы пробовали и что не так?
  • 0
    покажи нам свой код?
Показать ещё 4 комментария
Теги:

1 ответ

0

Предполагая, что ваша таблица users будет:

create table users (
  user_id int unsigned auto_increment primary key,
  fname varchar(50) not null,
  lname varchar(50) not null,
  uid varchar(50) unique
);

Создайте другую таблицу, в которой будут храниться последние порядковые номера для всех пользовательских инициалов:

create table uid_seq (
  initials varchar(2) not null primary key,
  seq int unsigned not null
);

Затем напишите триггер вставки для таблицы users, который увеличит порядковый номер для заданных инициалов и вернет его обратно, чтобы сгенерировать UID:

delimiter //
create trigger users_before_insert before insert on users
for each row begin
  set @initials = concat(left(new.fname,1), left(new.lname, 1));
  insert into uid_seq (initials, seq)
    values (@initials, last_insert_id(1))
    on duplicate key update seq = last_insert_id(seq + 1);
  set new.uid = concat(@initials, lpad(last_insert_id(), 3, 0));
end //
delimiter ;

Этот метод безопасен для параллелизма, потому что мы используем INSERT.. ON DUPLICATE KEY UPDATE.. и возвращаем сгенерированное значение, используя LAST_INSERT_ID(). Таким образом, два пользователя никогда не получат одинаковый UID. В худшем случае вы можете записать порядковый номер, когда сервер завершит работу во время обработки вставки. Однако - если вы выполняете вставку в транзакции, этого не должно произойти.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню