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

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
 

alpine

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

kruglov

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

Quessir

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

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

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

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

Wicked

Новичок
KartohA
Если это поле - автоинкремент, тогда какого ... архивариус имеет право изменять в нем занчения? Это его не касается, и касаться не должно.

Если тебе нужно просто пронумеровать список на странице, то выбирай записи из базы БЕЗ номера, а номер добавляй уже на стороне пхп. $i++ тебе в помощь.
 

KartohA

Новичок
Wicked
он не может менять число поля id... вы не поняли... он меняет номер кассеты (numcassete).
 

Wicked

Новичок
KartohA
действительно. Извиняюсь.

А архивариус редактирует таблицу напрямую общаясь с базой, или через пхп скрипт?
 

KartohA

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

Wicked

Новичок
Ну то, что советует 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.
 

alpine

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

-~{}~ 03.11.06 15:45:

Переиспользован будет только больший для группы если он будет удален, тоесть пропуски будут.
 

Wicked

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