Увеличение идентификатора пользователя - PullRequest
1 голос
/ 23 января 2012

У меня есть вопрос У меня есть таблица пользователей с двумя полями id, которая уже является первичным ключом и автоматическим приращением, однако у меня есть другое поле, которое называется user_id, которое является отдельным, и мне нужно иметь автоматическое приращение, но первое вставленная строка будет иметь значение 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 ]

2 голосов
/ 23 января 2012

Для этого вы можете использовать оператор 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 голос
/ 24 января 2012

Вы всегда можете просто создать свою собственную таблицу для хранения дополнительного числа, которое вы хотите автоматически увеличивать, в том же стиле, что и MySQL.Единственное отличие состоит в том, что в MySQL есть встроенная функция, которая поддерживает его для каждой таблицы для столбцов iNT.Но встроенный параметр предназначен только для одной строки и одной строки.

Сделайте то, что по сути дела, создав таблицу ID = tinyINT (4), user_id = INT (11)

Вставитьновая строка, ID = 1, user_id = 10000

перед тем, как вставить в другую таблицу запрос этой новой таблицы, получите user_id +1 и обновите ее .. затем используйте этот новый номер для вставки сна другом столе.

Я понимаю, что для дополнительных 2-х запросов это понятие связано с накладными расходами, но оно удовлетворяет необходимой цели.На самом деле, если вы правильно построите запрос JOIN, вы, скорее всего, сможете сделать это за один запрос по большей части

1 голос
/ 23 января 2012

Попробуйте это:

...
$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 - это МАКС.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...