Автор Тема: Генерация уникальной записи  (Прочитано 5121 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн sublimity

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 121
  • +0/-0
  • 0
    • Просмотр профиля
Генерация уникальной записи
« : 03 Октября 2005, 10:20:41 »
Возник вопрос, в решении которого, я надеюсь, вы мне поможете.
Есть уникальный индентификатор товара. Он состоит из 10-ти символов.
Первые 5 символов будут получаться по определенному правилу. Причем для товаров, принадлежащих одной группе,  эти символы будут одинаковыми. Оставшиеся 5 символов (именно символов, т.е. это и буквы и\\или числа) должны быть сгенерированы. Эти символы должны быть уникальными.

Есть таблица с :
ID: bigint(20) unsigned NOT NULL auto_increment
IDText: char(20) NOT NULL
Type: tinyint(4) default \'0\',
Где:
IDText- это  то самое поле,
Type- показывает свободна эта запись(0) или используется (1),или (3)-забронированна; т.к. индентификатор товара" может освобождаться и должен быть использован после.

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

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Генерация уникальной записи
« Ответ #1 : 03 Октября 2005, 12:00:09 »
лично я не понимаю смысла задачи.
смысл в обязательном паддинге до 10 символов
смысл в использовании букв.
смысл вообще в таком идентификаторе

Оффлайн sublimity

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 121
  • +0/-0
  • 0
    • Просмотр профиля
Генерация уникальной записи
« Ответ #2 : 03 Октября 2005, 15:46:37 »
Цитировать
смысл вообще в таком идентификаторе

Сам непонимаю :) Но так сложилось исторически, и к сожелению не изменить:(
Цитировать

лично я не понимаю смысла задачи.
смысл в обязательном паддинге до 10 символов
смысл в использовании букв.


Не обходимо генерировать следующую возможную последовательность символов
допустим есть:
MOSAU1111A - занят
MOSAU1111B - свободен
MOSAU1111C - занят
....
MOSAU111ZZ - занят

И надо далее сгенерировать при добавлении "товара": MOSAU11A00
Или найти MOSAU1111B ,т.е. найти свободные или создать новые...

Причем это возможно и паралельно , т.е. надо исключить при генерации возможность создания на два товара одинаковых номеров.

Мой вопрос как это лучше сделать?

Оффлайн AlieN

  • Абыр!=)
  • Ветеран
  • *****
  • Сообщений: 1315
  • +0/-1
  • 2
    • Просмотр профиля
Генерация уникальной записи
« Ответ #3 : 05 Октября 2005, 17:18:19 »
или я чего-то не понял....или:
SELECT COUNT(*) FROM `table` FROM `field` LIKE ("MOSAU1111?")
The Chemical Brothers - Hey Boy Hey Girl (User Friendly Mix)
Peter Presta pres - Set Sail(Peter Presta Apple Jaxx Dub) She S.Sunshine Feat Mila - Bring The Beat Back (Club Mix) Jerry Ropero - Home Alone (Dub Mix)

Оффлайн hanslinger

  • H2Oer
  • Ветеран
  • *****
  • Сообщений: 1148
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.orava.ru
Генерация уникальной записи
« Ответ #4 : 05 Октября 2005, 17:33:38 »
Только
"SELECT COUNT(*) FROM `table` FROM `field` LIKE ("MOSAU%")"
наверное.
Классная идея :)

Оффлайн sublimity

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 121
  • +0/-0
  • 0
    • Просмотр профиля
Генерация уникальной записи
« Ответ #5 : 05 Октября 2005, 17:37:25 »
Спасибо.
Есть еще одна идея:
от Steamroller[PHP Club]:

"
Надо только вот для этих генерируемых пятерок символов держать отдельный столбец.
И индекс составной по полям (Type, IDText)
Когда тебе надо создать новый номер, то делаешь так:
лочишь таблицу на запись (а не на чтение).
select idtext2 from table where type=0 order by idtext2 asc limit 1;
получаешь свободный идентификатор с наименьшим номером

Если таких нету -
select idtext2 from table order by idtext2 desc limit 1;
получаешь максимальный номер, дальше в PHP к нему уже единичку добавляешь.

"

Оффлайн sublimity

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 121
  • +0/-0
  • 0
    • Просмотр профиля
Генерация уникальной записи
« Ответ #6 : 05 Октября 2005, 17:45:10 »
тяжеловесный запрос получаеться с LIKE

Оффлайн hanslinger

  • H2Oer
  • Ветеран
  • *****
  • Сообщений: 1148
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.orava.ru
Генерация уникальной записи
« Ответ #7 : 05 Октября 2005, 17:50:38 »
А как ты хотел? Придумал идиотскую структуру - любись с ней.

Оффлайн sublimity

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 121
  • +0/-0
  • 0
    • Просмотр профиля
Генерация уникальной записи
« Ответ #8 : 05 Октября 2005, 18:42:23 »
hanslinger
Структуру не я придумал !!!
Об этом я уже писал...
Этой структурой пользуються 5 лет....
И в нее надо вклиниться, да так чтобы это было быстро и компактно...
Потому что после получения номера надо будет посылать запрос на заграничные кластер, и бронировать там этот номер, причем эту таблицу надо постоянно синхронизировать с загран.кластером причем на кластере IBM по протоколу 3270.....

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28