Автонумерация текстового поля

eurobax

Новичок
В mySQL есть auto_increment для числовых полей. Насколько знаю, только для числовых.
Мне нужно сделать автонумерацию, но текстового поля, например:
AA00000020
AA00000021
AA00000022
...
Т.е. есть префикс и фиксированная ширина номера.
(поправка: фиксированная ширина имеется в виду, вся длина номера, с учетом букв и цифр)
На данный момент решено в лоб, в самом скрипте PHP: поиск максимального значения, формирование следующего номера записи и собственно запись.
Ясно, что может произойти коллизия, и номера будут дублироваться.

Что можете предложить в качестве решения? Таких таблиц могут быть десятки, если делать хранимые функции, то придется ли их делать для каждой таблицы?
 

С.

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

Если префикс значимый, то ввести замену А=1, В=2, С=3.
 

eurobax

Новичок
Как я понял, речь там вроде про сквозную нумерацию в нескольких таблицах. Мне нужно не это, мне нужно как бы.. настроить текстовую нумерацию в каждой таблице. И таблиц этих - десятки.

Если префикс незначимый, то выкинуть его нафиг из базы. Будете добавлять при выдаче данных для красоты.
Если префикс значимый, то ввести замену А=1, В=2, С=3.
Да, значимый, например,это код организации в документе, чтобы видеть его на квитанции.
Забыл уточнить, префикса может и не быть вовсе, т.е. может быть и так: "2000580056", а может и он быть цифровым: "22-00000212", 22 - код организации.
И все в одной таблице (здесь я решаю не конкретную задачу, а универсально).
 

С.

Продвинутый новичок
Ппц! Автонумерация с учетом кода организации (которого может не быть). Исключительно если только переконфигурировать MySQL со стандартного порта на телепатический порт. И то если хостер разрешит.

Не дави мозги не нам, ни MySQLю. Простая сквозная автонумерация! Префикс будшь подставлять из другого поля при отображении данных.
 

prolis

Новичок
Заведите себе хорошую привычку - для каждой таблицы первый столбец: цифровой Id-автоинкремент. Код организации в документе спокойно полежит в соответствующем отдельном поле.
 

eurobax

Новичок
Да это не пипец, это есть у 1С - автонумерация текстовых кодов. Мне нужно то же самое.
Код организации - это просто пример. Абстракция префикса дается на откуп пользователю. Т.е. он сам решает, под какие критерии использовать префикс в номере, и длина префикса может быть произвольной.

Главный вопрос будет скорее вот в чем:
Есть две записи, с id:

A000000020
B000000014

следующий по порядку номер должен быть:
B000000015

Как это оптимально сделать?
 

baev

‹°°¬•
Команда форума
следующий по порядку номер должен быть:
B000000015
— почему?
Формализуйте условие, по которому после чисел, оканчивающихся на «20» и «14», «следующим по порядку» должно быть число, оканчивающееся на «15».
 

С.

Продвинутый новичок
Да, крайне интересно, почему следующий номер
B000000015, а не A000000021?
 

fixxxer

К.О.
Партнер клуба
Заведи два поля, одно - для префикса, второе - для автоинкремента.
Для префикса реализуй отдельный алгоритм получения текущего и следующего значений (из твоих постов неясно, как конкретно).
Можно это сделать на уровне базы хранимками и триггерами.
Полный идентификатор выбирай конкатенацией на уровне select-запроса.
 

eurobax

Новичок
— почему?
Формализуйте условие, по которому после чисел, оканчивающихся на «20» и «14», «следующим по порядку» должно быть число, оканчивающееся на «15».
Номер определяется с учетом всех символов. "B" по порядку идет после "A".
 

eurobax

Новичок
О, я и забыл что у mySQL есть триггеры.
prolois, за ссылку спасибо, буду смотреть в том направлении.
 
Сверху