Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Организация непрерывных списков. Или организации очереди?
|
|||
|---|---|---|---|
|
#18+
Пожалуй, действительно, мне в эту ветку... Дано: - набор записей (ну, например, записи о заказах - табличка ORDERS), в записи есть поле - Priority - приоритет. Integer. Nullable. Требуется: - при изменении значения Priority последовательность значений должна изменятьс так, чтобы получалась цепочка из значений от 1 до N. То же самое - при удалении, обNULL-ении и при вводе значений <=0 или > Count(*) where Priority is not nill Например, был набор записей: Код: plaintext 1. 2. 3. 4. 5. 6. Меняем значение Priority 3-й записи с Null на 2. Должно получиться: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Как бы лучше реализовать? сервер БД - FIREBIRD 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2004, 16:42 |
|
||
|
Организация непрерывных списков. Или организации очереди?
|
|||
|---|---|---|---|
|
#18+
Может лучше ставить время и дату а потом сортировать у кого дата свежее тот всегда будет первым ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2004, 16:50 |
|
||
|
Организация непрерывных списков. Или организации очереди?
|
|||
|---|---|---|---|
|
#18+
Ну, можно, конечно. Не обязательно Integer. Важна возможность организации непрерывного списка и особенно - манипуляция позицией в очереди. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2004, 16:57 |
|
||
|
Организация непрерывных списков. Или организации очереди?
|
|||
|---|---|---|---|
|
#18+
А нужно например передвигать очередь тоесть тот кто был к примеру 100 сделать его 50-м ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2004, 17:15 |
|
||
|
Организация непрерывных списков. Или организации очереди?
|
|||
|---|---|---|---|
|
#18+
Да, нужно. См. пример в 1-м посте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2004, 17:19 |
|
||
|
Организация непрерывных списков. Или организации очереди?
|
|||
|---|---|---|---|
|
#18+
перед изменением значения нужно сделать апдейт всех значений увеличивая их на единицу, начиная с данного числа declare @N int select @N = 2 update orders set Priority = Priority + 1 where Priority >= @N update orders set Priority = @N where id = @id ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2004, 18:17 |
|
||
|
Организация непрерывных списков. Или организации очереди?
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. Выборка упороядоченной очереди: с помощью иерархического запоса типа SELECT ... START WITH ... CONNECT BY ... Добавление в середину очереди: UPDATE ... SET PrevId=2 WHERE id=3; UPDATE ... SET PrevId=3 WHERE id=4 Удаление из середины очереди: UPDATE ... SET PrevId=NULL WHERE id=2; UPDATE ... SET PrevId=1 WHERE id=4 P.S.: "А нужно например передвигать очередь тоесть тот кто был к примеру 100 сделать его 50-м ???" Это сводится к последовательности операций удаления из середины очереди и добавления в середину очереди. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2004, 13:48 |
|
||
|
Организация непрерывных списков. Или организации очереди?
|
|||
|---|---|---|---|
|
#18+
2 LeXa NalBat Что??? Код: plaintext 1. 2. 3. - и это все можно делать в FB 1.5 ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2004, 14:13 |
|
||
|
Организация непрерывных списков. Или организации очереди?
|
|||
|---|---|---|---|
|
#18+
SELECT ... START WITH ... CONNECT BY ... - и это все можно делать в FB 1.5 ??? Я не сталкивался с FB. Предложил этот путь, предполагая что, возможно, там можно это так или иначе реализовать. В оракле это есть. В постгресе а) есть патч для иерархических запросов; или б) можно написать свою pl/pgsql функцию для этого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2004, 09:29 |
|
||
|
Организация непрерывных списков. Или организации очереди?
|
|||
|---|---|---|---|
|
#18+
Сдается мне, что этот не "иерархический" запрос. Или я не правильно понимаю терминологию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2004, 13:22 |
|
||
|
Организация непрерывных списков. Или организации очереди?
|
|||
|---|---|---|---|
|
#18+
Вроде бы это и называют иерархическим запросом. http://gppl.moonbone.ru/README.html : "This is a patch which allows PgSQL to make hierarchical queries a la Oracle do". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2004, 14:13 |
|
||
|
Организация непрерывных списков. Или организации очереди?
|
|||
|---|---|---|---|
|
#18+
Да, ваш случай - стек, мне кажется, можно рассматривать как частный случай дерева. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2004, 14:16 |
|
||
|
Организация непрерывных списков. Или организации очереди?
|
|||
|---|---|---|---|
|
#18+
У меня НЕТ ссылок на предыдущие элементы списка. Так как при отсутствии "иерархических" запросов пришлось бы создавать рекурсивную ХП. У меня просто подмножество записей упорядочено по одному из полей, с непрерывной нумерацией в заданном диапазоне (открытом с одной сторой). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2004, 15:08 |
|
||
|
Организация непрерывных списков. Или организации очереди?
|
|||
|---|---|---|---|
|
#18+
У меня НЕТ ссылок на предыдущие элементы списка. У меня просто подмножество записей упорядочено по одному из полей, с непрерывной нумерацией в заданном диапазоне (открытом с одной сторой). Если это данность, которую вы не можете изменить. То есть если по каким-либо причинам нельзя добавить в таблицу поле PrevId и удалить поле Priority. То, конечно же, вы не сможете использовать предложенный мною способ. В таком случае видимо остается довольствоваться вариантом, который предложил Old Nick. Подумайте об эффективности узкого места в этом алгоритме: "нужно сделать апдейт всех значений увеличивая их на единицу". В лагоритме с иерархическими запросами узким местом, конечно же, является "select ..." - оцените его эффективность при реализации через рекурсивную ХП в FB. И - выбирайте. :) "Рекурсивная ХП" - это функция вызывающая сама себя? В постгресе я сделал иначе - LOOP внутри ХП. Может быть аналогично можно сделать в FB? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2004, 15:48 |
|
||
|
|

start [/forum/topic.php?fid=32&tid=1546331]: |
0ms |
get settings: |
11ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
68ms |
get topic data: |
13ms |
get forum data: |
4ms |
get page messages: |
65ms |
get tp. blocked users: |
2ms |
| others: | 258ms |
| total: | 450ms |

| 0 / 0 |
