Eu tenho uma tabela de usuários no mysql, insiro dados como este:
/* prepare query */ $query = 'INSERT INTO `users`(`first_name`, `last_name`, `gender`, `username`, `profile_picture`, `provider`, `provider_id`, `provider_username`, `provider_profile`, `provider_profile_picture`, `last_login`, `created_date`, `ip_address`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, NOW(), NOW(), INET_ATON(?))'; /* Prepare an insert statement */ $stmt = $mysqli->prepare($query); if($stmt){ $stmt->bind_param("sssssssssss", $user['first_name'], $user['last_name'], $user['gender'], $user['username'], $user['profile_picture'], $user['provider'], $user['id'], $user['username'], $user['link'], $user['profile_picture'], $_SERVER['REMOTE_ADDR']); $stmt->execute(); /* Execute the statement */
Gostaria de fazer o username
ser igual a 'user'
+ userId
que é o campo da chave primária autoincremental.
para que os nomes de usuários entrem em ordem:
user1 user2 user3 and so forth
O que é uma maneira lisa de conseguir isso?
Se user_id
for uma chave primária AUTO_INCREMENT, então você não pode fazer isso com uma única instrução, mesmo se você usar um gatilho.
O problema é que o valor AUTO_INCREMENT não é gerado até que o gatilho BEFORE INSERT
executado, mas você não pode alterar o username
no AFTER INSERT
trigger.
Então, você só precisa fazer o INSERT
, então faça imediatamente uma UPDATE
.
Se user_id
não for AUTO_INCREMENT, mas é algo que você especifica, então é fácil, você apenas faz a concatenação no seu código PHP antes de passar os valores como parâmetros.
Supondo que o nome de usuário seja sempre ‘usuário’ + userid, a maneira mais linda que eu posso pensar para fazer isso é ter uma tabela com tudo, exceto o username
, e uma vista em cima dessa tabela que adiciona o username
. Você faria quaisquer inserções e atualizações na mesa, e qualquer seleção que exija o username
poderia ser feita na visualização.
CREATE VIEW userview AS SELECT user_id, first_name, last_name, gender, profile_picture, provider, provider_id, provider_username, provider_profile, provider_profile_picture, last_login, created_date, ip_address, 'user' + user_id as username FROM USER