【问题标题】:Concatenating a string and primary key Id while inserting插入时连接字符串和主键 ID
【发布时间】:2021-12-20 12:08:11
【问题描述】:

我在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

有什么巧妙的方法可以做到这一点?

【问题讨论】:

  • 没有一个巧妙的方法。要实际设置该值,您需要一个触发器。
  • @GordonLinoff 有什么建议吗?
  • 。 .我有点希望你会想“哦,触发器,这太复杂了”。从文档开始:dev.mysql.com/doc/refman/5.7/en/trigger-syntax.html.
  • 这听起来很复杂,因为我认为这很简单,但@bill 说触发器不会与自动增量一起使用。嗯,我应该放弃这个想法吗?

标签: php mysql


【解决方案1】:

如果 user_id 是一个 AUTO_INCREMENT 主键,那么即使您使用触发器,也不能使用单个语句来执行此操作。

问题是直到 BEFORE INSERT 触发器运行后才生成 AUTO_INCREMENT 值,但您无法更改 AFTER INSERT 触发器中的 username

所以您只需执行INSERT,然后立即执行UPDATE

如果user_id 不是 AUTO_INCREMENT,而是您自己指定的,那么很简单,您只需在 PHP 代码中进行连接,然后再将值作为参数传递即可。p>


更新:您也不能使用 MySQL 5.7 生成的列。当您尝试创建表时,它会导致此错误:

生成的列“用户名”不能引用自增列。

【讨论】:

    【解决方案2】:

    假设用户名是 always '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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-16
      • 2017-08-08
      • 2010-12-07
      • 1970-01-01
      • 2013-08-04
      相关资源
      最近更新 更多