Форум: "Начинающим";
Текущий архив: 2007.04.15;
Скачать: [xml.tar.bz2];
ВнизГенератор чисел Найти похожие ветки
← →
Vas © (2007-03-21 09:54) [0]Пишу такои тигер:
AS
begin
IF (new_table.nomer IS NULL) THEN
new_table.nomer = GEN_ID(MYGENERATOR, 1);
end
Возникаэт проблема, когда вставляю запись в середину таблици то запись переноситься в конец таблыци из конечным числом. Как сделать щобы запись добавлялась в середину?
← →
Reindeer Moss Eater © (2007-03-21 09:57) [1]У таблицы нет середины.
← →
Johnmen © (2007-03-21 10:03) [2]И конца тоже нет
← →
Vas © (2007-03-21 10:03) [3]Пример таблици:
1 апрпар
2 окнео
3 роапол
4 ваоуо
..........
Хочу вставить запись после 2 записи, а получается що она ставится последней из числом по порядку 5
← →
Johnmen © (2007-03-21 10:13) [4]Ты чё, глухой? В смысле, слепой?
И это, книжку какую почитай, про базы данных букварь....
← →
Vas © (2007-03-21 10:17) [5]и на том спасибо
← →
Johnmen © (2007-03-21 10:23) [6]Да ты не обижайся.
Просто твои желания бредовые.... Это от того, что ты основ не знаешь.
← →
Виталий Панасенко © (2007-03-21 11:26) [7]Ты ж сам сортируешь по числу NOMER.. а 5 больше 4.. как и двух тоже..:-)
← →
Vas © (2007-03-21 14:01) [8]Я не сортирую, мне надо вставить дание после числа 2 из номером по порядку 3, а дание которые были под номером 3 стали 4, а 5 под 6.
← →
Sergey13 © (2007-03-21 14:05) [9]> [8] Vas © (21.03.07 14:01)
С таким подходом, если в таблице 1000000 записей, весь миллион переправить надо?
← →
Johnmen © (2007-03-21 14:09) [10]
> Vas © (21.03.07 14:01) [8]
> Я не сортирую, мне надо вставить дание после числа 2 из
> номером по порядку 3, а дание которые были под номером 3
> стали 4, а 5 под 6.
Зачем?
← →
kaif © (2007-03-21 15:04) [11]Я иногда завожу два поля для таких случаев:
ID (суррогатный ключ)
R_ORDER (поле для ручной сортировки записей)
В триггере BEFORE INSERT присваиваю одно и то же значение генератора полю ID и R_ORDER. В дальнейшем если юзеру нужно руками переместить запись "на одну назад" меняю местами R_ORDER у двух соседних записей.
Разумеется, такой подход хорош лишь если записей мало или же пользователя интересует порядок записей в пределах какого-то другого, более мощно варианта сортировки.
Скажем, сортировка документов в пределах суток. Если за сутки вводится не более нескольких десятков документов, то такой способ неплохо работает. Сотрировка ORDER BY DOC_DATE, R_ORDER. Как правило пользователя устраивает добавлять запись в конец. Однако если какой-то документ он хочет переставить немного наверх в пределах одной даты, то он может воспользоваться стрелками "наверх/вниз" в интерфейсе списка. Нажатие этих кнопок меняет R_ORDER у двух соседних записей.
Я этот подход не навязываю, привожу лишь как простой и иногда приемлемый вариант решения, особенно для небольших справочников (до 50 записей) или небольших потоков документов (до 50 документов в сутки).
В принципе можно создать поле типа DOUBLE PRECISION и туда писать тот же ID при вставке. Тогда, возможно, не придется ничего переставлять, так как между двумя соседними ID можно будет что-то еще вставить. Однако я такой подход никогда не использовал, так как число вставок "между" подобным способом весьма ограничено разрядностью хранения мантиссы DOUBLE PRECISION. Хотя если переставляют записи редко, то, не исключено, что это был бы практичный подход. Интересно, кто-нибудь так делал из присутствующих?
А вообще иногда я применяю и сплошной сдвиг нумерации R_ORDER, если записей относительно "много" (тысячи, но не десятки тысяч), если эта операция крайне редкая.
То есть выбор приемлемого решения, ИМХО, требует заранее знать:
1. Сколько записей вообще предполагается в таблице (10,100, 1000 или миллионы)
2. Как часто требуются такие "ручные" перестановки
3. Существует ли какое-то более общее ограничение (дата, папка и т.п.), позволяющее сузить такие перестановки (или сдвиги) до какого-то существенно ограниченного количества записей (менее сотни).
Если кто-то несогласен, прошу ногами не бить. Хотя возражения приму, особенно если имеются лучшие идеи.
← →
Другой © (2007-03-21 15:13) [12]kaif © (21.03.07 15:04) [11]
Еще, когда нужно задать приоритет записи, можно делать так: переставлять этот номер приоритета. Это да.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.04.15;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.045 c