Эффективная проверка, если значение существует в базе данных

0

Я хочу создать уникальное значение и сохранить его в базе данных.

function generateRandomString($length = 10) {
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $charactersLength = strlen($characters);
    $randomString = '';
    for ($i = 0; $i < $length; $i++) {
        $randomString .= $characters[rand(0, $charactersLength - 1)];
    }
    return $randomString;
}

У меня есть два варианта (PSEUDO CODE):

1)

$allValues = 'SELECT unique_number FROM table'; //EXAMPLE!

$number = generateRandomString();

while(in_array(number, $allValues)) {
    $number = generateRandomString();
}

2)

function getUniqueNumber($uniqueNumber) {
    return 'SELECT unique_number FROM table WHERE unique_number = ' . $uniqueNumber; //EXAMPLE!
}

$number = generateRandomString();

while(getUniqueNumber($unique)) {
    $number = generateRandomString();
}

Но оба метода неэффективны, если у меня более 100 000 записей.

Лучший способ проверить, существует ли значение в базе данных и генерировать новое, если существует?

Для этого я могу использовать также Доктрину.

  • 4
    Почему заново изобретать целое колесо вместо использования uniqid () ? ... ваш generateRandomString() не будет возвращать «уникальные» идентификаторы вообще
  • 0
    Поскольку мой номер имеет установленные правила, он не может быть уникальным.
Показать ещё 3 комментария
Теги:
doctrine

1 ответ

0

Если вам просто нужно уникальное значение в этой таблице, самый простой способ - вставить в эту таблицу поле автоматического инкремента, поэтому при каждой вставке база данных создаст это для вас:

ALTER TABLE 'users' ADD 'id' INT NOT NULL AUTO_INCREMENT PRIMARY KEY

Затем вы можете получить это значение с помощью mysql_insert_id() или PDO::lastInsertId

Ещё вопросы

Сообщество Overcoder
Наверх
Меню