Порядковый номер, как и что?

  • Автор темы Автор темы KartohA
  • Дата начала Дата начала

KartohA

Новичок
Порядковый номер, как и что?

Добрый день. Запара вот в чем.
Предположим архивариус забивает данные: Номер кассеты, после автоматом этой кассете присваевается порядковый номер.

таблица cassete

id | numcassete (номер кассеты) | pornum (порядковый номер) |

1 | 01 | 1
2 | 01 | 2
3 | 01 | 3
4 | 01 | 4

Вопрос:
если архивариус ошибся. исправил номер кассеты записи №2 (id=2) с 01 на 02, как автоматом присвоить записи 3(id=3) порядковый номер "2" и так далее для всех записей с номером кассеты "01".

Может я структуру базы составил не верно. Подскажите?

-~{}~ 01.11.06 17:10:

т.е. получится после редактирования записи (id=2) должно так:

1 | 01 | 1
2 | 02 | 1
3 | 01 | 2
4 | 01 | 3
 
KartohA
если архивариус ошибся. исправил номер кассеты записи №2 (id=2) с 01 на 02, как автоматом присвоить записи 3(id=3) порядковый номер "2" и так далее для всех записей с номером кассеты "01".
Зачем хранить порядковую нумерацию в базе? Почему бы ее не формировать при выводе?
 
Предусмотреть интерфейс "перенос кассеты в новое место", пускай там сами обновляются все затронутые номера.
 
Re: Порядковый номер, как и что?

Автор оригинала: KartohA

т.е. получится после редактирования записи (id=2) должно так:

1 | 01 | 1
2 | 02 | 1
3 | 01 | 2
4 | 01 | 3
А че, это плохо, если id не равен номеру(3-му полю). Вообще-то ID cтавят автоинкрементом. И не изменяют его.
 
KartohA
Если это поле - автоинкремент, тогда какого ... архивариус имеет право изменять в нем занчения? Это его не касается, и касаться не должно.

Если тебе нужно просто пронумеровать список на странице, то выбирай записи из базы БЕЗ номера, а номер добавляй уже на стороне пхп. $i++ тебе в помощь.
 
Wicked
он не может менять число поля id... вы не поняли... он меняет номер кассеты (numcassete).
 
KartohA
действительно. Извиняюсь.

А архивариус редактирует таблицу напрямую общаясь с базой, или через пхп скрипт?
 
Wicked
через пхп скрипт.(админка) хочу вот попробовать сегодня то, что посоветовал alpine
 
Ну то, что советует alpine, не подойдет, если тебе нужно иметь списки без пропусков.

ну смысл действий должен быть примерно такой:
1) схлопнуть записи в старой группе numcasete (update set pornum = pornum - 1 where pornum > $oldPornum and numcassete = $oldNumcassete).
2) проверить, что новый pornum меньше или равен максимума по всем pornum в новой группе numcasete. Если больше - присвоить pornum = max + 1; Меньше единицы тоже нельзя давать вводить.
3) раздвинуть записи в новой группе numcassete (update set pornum = pornum + 1 where pornum >= $newPornum and numcassete = $newNumcassete).

Вообще задача очень похожа на перенос узла в nested sets.
 
KartohA
Попробуй, я не уверен, правда придется дополнительную таблицу создавать так как у тебя уже PRIMARY KEY в этой есть.

-~{}~ 03.11.06 15:45:

Переиспользован будет только больший для группы если он будет удален, тоесть пропуски будут.
 
KartohA
"схлопнуть" - это избавиться от пропуска, образованного из-за удаления записи, уменьшив все последующие номера на единицу.
как схлопнуть - там написано в скобках.
 
Сверху