У меня есть таблица пользователя в mysql, я вставляю данные следующим образом:
/* 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 */
Я бы хотел, чтобы username
было равно 'user'
+ userId
которое является полем автоматического ввода ключа.
так что имена пользователей приводятся в порядок:
user1 user2 user3 and so forth
что это хороший способ сделать это?
Если user_id
является основным ключом AUTO_INCREMENT, вы не можете сделать это с помощью одного оператора, даже если вы используете триггер.
Проблема заключается в том, что значение AUTO_INCREMENT не генерируется до тех пор, пока не запускается триггер BEFORE INSERT
, но вы не можете изменить username
в триггере AFTER INSERT
.
Таким образом, вам просто нужно сделать INSERT
, а затем немедленно сделать UPDATE
.
Если user_id
не является AUTO_INCREMENT, но вместо этого вы указываете себя, то это легко, вы просто выполняете конкатенацию в своем PHP-коде, прежде чем передавать значения в качестве параметров.
Предполагая, что имя пользователя всегда «user» + userid, самым простым способом, который я могу придумать, является наличие таблицы со всем, кроме username
, и представление поверх этой таблицы, которая добавляет username
. Затем вы будете делать любые вставки и обновления в таблице, и любые варианты, которые требуют username
могут быть сделаны в представлении.
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