2013-11-19 3 views
0

У меня есть дилемма. Мне нужна уникальная строка в моей таблице базы данных, чтобы показать ее в url (я не показываю id в url).PHP уникальное поле идентификатора в url

Я хочу сгенерировать в php уникальную проверку строки, она уникальна в таблице, если не сгенерирована новая.

Что вы думаете о производительности для строки длиной 8 символов и с большим количеством строк (около 100 000 строк).

ответ

1

Вы можете создать уникальный идентификатор в php, используя uniqid().

При создании нового идентификатора проверьте БД, чтобы узнать, существует ли он. Если это так, создайте новый. Предполагая, что вы настроили индекс в этом столбце в базе данных, эти проверки будут не очень дорогими.

В псевдо (-ish) Код:

while (true) { 
    $id = uniqid(); 

    if (!id_exists_in_db($id)) // we have a unique id 
    break; 
} 
+0

Спасибо за код, но я думаю, что в основном о производительности вы мне отвечаете. – Zaki

1

Вместо генерации уникального ключа, кроме идентификатора, вы можете также создать функцию, которая хэширует или кодирует идентификатор в строку. Например, вы можете преобразовать целое число в шестнадцатеричное представление с 8 символами. Вы можете сделать это немного сложнее, если хотите, но все же довольно легко написать функцию, которая использует фиксированную формулу для преобразования числа до 8 букв и наоборот. Таким образом, вам не нужно хранить эти дополнительные данные, и вам не нужно беспокоиться о уникальности значения.

<?php 

function translate($key, $back) 
{ 
    $key = str_pad($key, 8, '0', STR_PAD_LEFT); 
    $a = array('1','2','3','4','5','6','7','8','9','0'); 
    $b = array('a','b','c','d','e','f','g','h','i','j'); 
    if ($back) {$c = $b; $b = $a; $a = $c;} 
    return str_replace($a, $b, $key); 
} 

function encode_id($int) 
{ 
    return translate($int, false); 
} 

function decode_id($key) 
{ 
    return (int)translate($key, true); 
} 

$key = encode_id(40000); 
$int = decode_id($key); 
echo $key; 
echo '<br>'; 
echo $int; 
+0

Хорошая идея, но в моем случае это не так просто. – Zaki

+0

Почему бы и нет, если я могу спросить? – GolezTrol

+0

Я предпочитаю не давать твоей мысли :) – Zaki

Смежные вопросы