我在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
什么是实现这一目标的光滑方式?
答案 0 :(得分:2)
如果user_id
是AUTO_INCREMENT主键,则即使使用触发器,也不能使用单个语句执行此操作。
问题是在BEFORE INSERT
触发器运行之后才会生成AUTO_INCREMENT值,但您无法在username
触发器中更改AFTER INSERT
。
所以你必须执行INSERT
,然后立即执行UPDATE
。
如果user_id
不是是一个AUTO_INCREMENT,而是您自己指定的东西,那么很容易,您只需在将PHP值作为参数传递之前在PHP代码中进行连接。
答案 1 :(得分:0)
假设用户名始终'用户' + 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