Варианты автораздачи.

Coffin

Новичок
Варианты автораздачи.

Есть n-ое количество это Шагов.
Есть 3 категории
Категория 1, ей выдаются номер с 100 по 199
Категория 2, ей выдаются номер с 200 по 299
Категория 3, ей выдаются номер с 300 по 399

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

При этом на каждый новый этап номера начинаются выдаваться заново.

Пример:
1. Заношу запись в Категорию 1, ей приделывается номер 100
2. Заношу запись в Категорию 1, ей приделывается номер 101
3. Заношу запись в Категорию 1, ей приделывается номер 102
Потом я номер 102 меняю на 77
Соответственно у 3 записи теперь номер стал 77
4. Заношу запись в Категорию 1, ей приделывается номер 102

Вот кто где посоветует хранить эти самые номера ? и в каком виде ? :)
 

dimagolov

Новичок
Coffin ты забыл сказать номера уникальны или нет. если уникальны, то "возможность этот номер изменить на любой другой" не прокатит, а если нет, то нафиг они вообще нужны?
 

AmdY

Пью пиво
Команда форума
завети отдельную таблицу для "автоинкрементов" : с полями - таблица, категория, последнее значение.
 

Coffin

Новичок
Примерная таблица такая
id - uniqe
Category - varchar
number - int

Т.е. уникальное только id и соответвенно number не может быть одинаков тоже.
Но при этом, если Категория 1 , то вручную можно хоть 201 поставить, а вот автоматом только от 100 до 199 при этом из еще не выданных :)

-~{}~ 20.11.08 15:59:

Все мега-мозги слились ? :)
 

Ravanger

Новичок
Coffin
Я думаю мега умы не решали бы такую задачу эм... три дня...

-~{}~ 20.11.08 16:37:

+ только ты один знаешь что тебе надо
+ только тебе одному это надо
+ только тебе это и решать
 

Coffin

Новичок
я не 3 дня решал :)
Если я через 3 дня ответил, это еще ничего не значит.

если словами нельзя объяснить, что надо, то как тебе тогда объясняют, что тебе надо сделать ?
не мне одному это надо :)
да решил уже, не беспокойся.
 

Ravanger

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

AmdY

Пью пиво
Команда форума
Coffin
ты лучше напиши, зачем тебе это? а то я подозреваю, что ты сразу придумал костыль, а затем мучался кодируя его.
 

Coffin

Новичок
Да никаких костылей.
Все банально
Это я делаю для нужд людей (бесплатно, по старой дружбе) сайт по авторалли.

Человек в заявке указывает какой у него привод машины , передний, задний, полный.

Есть админка, админ просматривает заявки, когда он утверждает заявку, то выдается номер участника. Номера распределяются след образом.
Передний от 100 до 199
Задний от 200 до 299
Полный от 300 до 399
Выдаются по порядку.

Но скажем, админ утвердил заявку с передний приводом и ему присваивается номер участника 150 (т.е. у него передний привод) , но человеку по каким-то причинам захотелось сделать номер 222 и тут освобождается номер 150 (т.е. теперь он должен достаться следующему зарегистрировавшемуся участнику), а 222 становится занят.

Вот зачем вся эта хрень нужна :)
 

dimagolov

Новичок
ты не с той стороны подошел к проблеме.
заявки участников никакого отношения к номерам не имеют. можно вообще заносить заявки, а номера не утверждать. номер должен быть одним из полей (атрибутов) заявки, но никак не ее ключем. при этом ничего не мешает сделать на это поле уникальный ключ, чтобы средствами БД не допустить дублирующихся номеров.

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

Coffin

Новичок
я ни разу нигде не упомянул, что я сделал поле уникальным :)
и вообще я сделал методом без вспомогательных таблиц.
Не не надо хранить никакой диапазон свободных номеров.
В общем если хорошо все обдумать, то можно обойтись только переменными и одним запросом к БД, что бы узнать какие номера уже выданы :)
 
Сверху