增加用户ID

时间:2012-01-23 19:17:17

标签: php codeigniter

我有一个问题我有一个用户表,有两个字段id已经是主键和自动增量但是我有另一个名为user_id的字段,它是独立的,我需要有自动增量但是第一个插入的行在db中的值为10000,并在此之后递增。

这是我到目前为止在数据库中创建用户的功能。如何以尽可能少的代码将第一行插入10000,然后再添加1。

/**
 * Create new user record
 *
 * @param   array
 * @param   bool
 * @return  array
 */
function create_user($data)
{
    $data['created'] = date('Y-m-d H:i:s');

    $this->db->set('username', $data['username']); 
    $this->db->set('password', $data['password']); 
    $this->db->set('password2', $data['password2']); 
    $this->db->set('email', $data['email']);
    $this->db->set('first_name', $data['first_name']);  
    $this->db->set('last_name', $data['last_name']); 


    $query = $this->db->insert('users');

    if ($query) 
    {
        $user_id = $this->db->insert_id();
        if ($activated) $this->create_profile($user_id);
        return array('user_id' => $user_id);
    }
    return NULL;
}

3 个答案:

答案 0 :(得分:2)

您可以使用INSERT INTO ... SELECT语句。不知道如何在数据库库中应用它。但它的纯SQL。请参阅我的MySQL控制台日志。

mysql> CREATE TABLE `users`(
    id INT AUTO_INCREMENT,
    `name` VARCHAR(10), 
    `user_id` INT, 
    PRIMARY KEY(`name`), 
    UNIQUE KEY (`id`)
);
Query OK, 0 rows affected (0.05 sec)

mysql> INSERT INTO users VALUES (null, 'name1', 10000);
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO users SELECT null, 'name2', MAX(`user_id`)+1 FROM `users`;
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> INSERT INTO users SELECT null, 'name2', MAX(`user_id`)+1 FROM `users`;
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM `users`;
+----+-------+---------+
| id | name  | user_id |
+----+-------+---------+
|  1 | name1 |   10000 |
|  2 | name2 |   10001 |
|  3 | name3 |   10002 |
+----+-------+---------+
3 rows in set (0.00 sec)

答案 1 :(得分:1)

试试这个:

...
$this->db->set('username', $data['username']); 
$this->db->set('user_id', 'MAX(user_id)+1');
$this->db->set('password', $data['password']);
...

并创建第一个user_id为10000的用户。这样,10000就是MAX。

答案 2 :(得分:1)

你可以随时创建自己的表来存储你想要自动增加的额外数字,就像mySQL所做的那样。唯一的区别是mySQL有一个内置函数来支持iNT列的每个表。但内置选项仅适用于一行和一行。

本质上通过创建表ID = tinyINT(4),user_id = INT(11)

来实现

插入新行,ID = 1,user_id = 10000

在插入到其他表中之前,对此新表的查询获取user_id +1,然后更新它...然后使用该新数字插入另一个表。

我意识到这有额外2个查询的开销概念,但它满足了所需的目的。实际上,如果你以正确的方式构建一个JOIN查询,你可以在大多数情况下在单个查询中完成所有这些