[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Уникальный числовой Order ID
Страницы: 1, 2
I++
Цитата
Если есть, то пробуешь другое. И так далее, пока не подберешь smile.gif

Конечно вариант того, что это умрет в бесконечном цикле равно 0.000001 но всеж.
sergeiss
Цитата (I++ @ 20.11.2014 - 16:04)
Конечно вариант того, что это умрет в бесконечном цикле равно 0.000001 но всеж.

Там всегда есть выход из цикла :) И да, размерность айдишника должна быть заведомо больше, чем их количество, на несколько порядков. То есть, ежели предполагается не более 100 тыщ уникальных айдишников (10^5), то их длина должна быть хотя бы 10^8.
В моем примере 10^10, что позволяет хранить достаточно количество чисто числовых айди :) Например, с 1 млн. не должно быть проблем. Тем более, что их можно всегда сделать символьно-числовыми, для чего достаточно заменить эту вот строку:
id_unique_new := cast( cast( 1000000000 + random()*9999999999 as bigint) as varchar(10));


Опять же, я и не настаиваю, что это самый правильный вариант. Это "один из".

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Alchemist
на самом деле вопрос некорректно поставлен... что такое "короткий" и "фиксированной длинны" ?

с датой и дневным инкрементом:
// len=8, sortable, up to 1k orders/day, up to 36.5M orders total (till first collision after 100 years)
$orderID = date('y').str_pad(date('z'),3,'0',STR_PAD_LEFT).str_pad($daily_increment,3,'0',STR_PAD_LEFT);

// len=6, sortable*, up to 100 orders/day, up to 365k orders total (till first collision after 10 years)
$orderID = substr(date('y'),-1).str_pad(date('z'),3,'0',STR_PAD_LEFT).str_pad($daily_increment,2,'0',STR_PAD_LEFT);

// len=5+, unsortable, unlimited orders/day, first collision after 10 years)
$orderID = $daily_increment.substr(date('y'),-1).str_pad(date('z'),3,'0',STR_PAD_LEFT);

с общим инкрементом:
// len=3+, sortable, unlimited
$orderID = $auto_increment.mt_rand(10,99);
А вообще все это от лукавого. Мы обычно просто выставляем auto_increment в 2049 (для ровного счета) и все счастливы...
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.