2013-09-16 6 views
2

Я создаю веб-сайт, который будет обновляться сообщениями авторов, комментариями и т. Д. И т. Д., И мне интересно, как лучше создать идентификатор, чтобы предотвратить дублирование в любом из таблиц. Я использую метку времени в данный момент вместе с уникальным номером, в конце концов, как:ИД базы данных MySQL

$time = time(); 
$id= time().'-'.mt_rand(1000, 9999); 

Для выхода:

1378291391-1167, 1378294733-8990, 1378294934-3336 и т.д., и т. д.

Может ли кто-нибудь увидеть проблему с этим типом системы создания идентификатора?

+0

Да, случайные числа не гарантируется уникальный –

+1

Это звучит как XY-проблема. http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem - пожалуйста, объясните, почему вам нужно, чтобы идентификаторы были уникальными по нескольким таблицам, и мы расскажем вам, почему это плохая идея. – Halcyon

+0

Почему идентификатор должен быть глобально уникальным? 'foo.id',' bar.id' и т. д. ... глобально уникальны, даже если часть id может быть дублирована в нескольких таблицах. –

ответ

1

Я бы увеличить уникальность с помощью

  • microtime() вместо time()

  • если строки разрешено, добавление микропоры с uniqid() функцией

  • и использование mt_rand с большими значениями (mt_rand(0, 10000000))

http://php.net/manual/en/function.uniqid.php

http://fi2.php.net/microtime

+0

Это 'uniqid', а не' uniqueid', что, я считаю, это то, что вы имели в виду. http://php.net/manual/en/function.uniqid.php - который я заметил на той же странице. Я считаю, что это была ошибка от человека, который опубликовал его на PHP.net. –

+0

Да, вы правы – iiro

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