Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1174671791
Юзер2000
2007-03-23 20:43
2007.04.15
Locate возвращает стринг???


15-1174210474
Донской
2007-03-18 12:34
2007.04.15
IDE семерки


9-1146880328
Сценарист
2006-05-06 05:52
2007.04.15
Что случилось с CVS ?


15-1174605082
Макс Черных
2007-03-23 02:11
2007.04.15
Забавный баян про поэтов :)


15-1174323208
oldman
2007-03-19 19:53
2007.04.15
Вчера рассказали новый Закон Мерфи (возможно боян)...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский