Восстановление нумерации в базе, поле не автоинкремент?
Есть таблица. В таблицу при каждом добавлении вносится 8 записей (1 пачка = 8 записям). У этих восьми записей существует поле отвечающее за позицию, соответственно оно одинаково для каждой пачки.
Для первых восьми оно будет равняться 1, для вторых восьми — 2 и т.д. (убил бы за такую организацию). После удаления пачки последовательность нарушается.
Например если удалил вторую пачку, то осталось 8 записей со значением 1 и 8 со значением 3.
Собсвенно вопрос: как после каждого удаления вернуть последовательность каждой пачке?
Если в таблице используется InnoDB, то можно это записать в триггер. А как расположить все это по порядку — не знаю =\ Если бы существовала какая-нибудь переменная MySQL, обозначающая порядковый номер текущей строки в запросе UPDATE, можно было бы его поделить на 8, но такой вроде бы нет.
Как вариант — запустить несколько апдейтов вида: UPDATE table SET index = index - 1 WHERE index > 2 AND index < 5;
UPDATE table SET index = index - 2 WHERE index > 5
Но меня терзают сомнения в правильности подобного.
На каком-нибудь php выбрать массивчик с отсутствующими индексами.
и далее цикл UPDATE table SET index = index — i WHERE index > array[i-1] AND index < array[i];
Что означает «вернуть последовательность»? Если удалили пачку 2, то все пачки с номера 3 до последней должны быть обновлены, так выходит? А если удалена не полная пачка, так может быть? А если добавлена?