powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Организация непрерывных списков. Или организации очереди?
15 сообщений из 15, страница 1 из 1
Организация непрерывных списков. Или организации очереди?
    #32629895
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пожалуй, действительно, мне в эту ветку...

Дано:

- набор записей (ну, например, записи о заказах - табличка ORDERS), в записи есть поле - Priority - приоритет. Integer. Nullable.

Требуется:

- при изменении значения Priority последовательность значений должна изменятьс так, чтобы получалась цепочка из значений от 1 до N. То же самое - при удалении, обNULL-ении и при вводе значений <=0 или > Count(*) where Priority is not nill

Например, был набор записей:

Код: plaintext
1.
2.
3.
4.
5.
6.
Id Priority Name

1  1        Первый
2  2        Второй
3  Null     Третий
4  3        Четвертый
5  Null     Пятый



Меняем значение Priority 3-й записи с Null на 2. Должно получиться:


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Id Priority Name

1  1        Первый
2  3        Второй
3  2        Третий
4  4        Четвертый
5  Null     Пятый
 


Как бы лучше реализовать?

сервер БД - FIREBIRD 1.5
...
Рейтинг: 0 / 0
Организация непрерывных списков. Или организации очереди?
    #32629914
Alexander Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может лучше ставить время и дату а потом сортировать у кого дата свежее тот всегда будет первым
...
Рейтинг: 0 / 0
Организация непрерывных списков. Или организации очереди?
    #32629926
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, можно, конечно. Не обязательно Integer. Важна возможность организации непрерывного списка и особенно - манипуляция позицией в очереди.
...
Рейтинг: 0 / 0
Организация непрерывных списков. Или организации очереди?
    #32629967
Alexander Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А нужно например передвигать очередь тоесть тот кто был к примеру 100 сделать его 50-м ???
...
Рейтинг: 0 / 0
Организация непрерывных списков. Или организации очереди?
    #32629979
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, нужно. См. пример в 1-м посте.
...
Рейтинг: 0 / 0
Организация непрерывных списков. Или организации очереди?
    #32630095
Фотография Old Nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
перед изменением значения нужно сделать апдейт всех значений увеличивая их на единицу, начиная с данного числа

declare @N int
select @N = 2
update orders
set Priority = Priority + 1
where Priority >= @N

update orders
set Priority = @N
where id = @id
...
Рейтинг: 0 / 0
Организация непрерывных списков. Или организации очереди?
    #32630607
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
Id PrevId Name

1  0      Первый
2  1      Второй
3  Null   Третий
4  2      Четвертый
5  Null   Пятый

Выборка упороядоченной очереди: с помощью иерархического запоса типа 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-м ???" Это сводится к последовательности операций удаления из середины очереди и добавления в середину очереди.
...
Рейтинг: 0 / 0
Организация непрерывных списков. Или организации очереди?
    #32631461
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 LeXa NalBat

Что???

Код: plaintext
1.
2.
3.
 SELECT ... START WITH ... CONNECT BY ...

...



- и это все можно делать в FB 1.5 ???
...
Рейтинг: 0 / 0
Организация непрерывных списков. Или организации очереди?
    #32632429
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SELECT ... START WITH ... CONNECT BY ... - и это все можно делать в FB 1.5 ???

Я не сталкивался с FB. Предложил этот путь, предполагая что, возможно, там можно это так или иначе реализовать.

В оракле это есть. В постгресе а) есть патч для иерархических запросов; или б) можно написать свою pl/pgsql функцию для этого.
...
Рейтинг: 0 / 0
Организация непрерывных списков. Или организации очереди?
    #32633192
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сдается мне, что этот не "иерархический" запрос. Или я не правильно понимаю терминологию.
...
Рейтинг: 0 / 0
Организация непрерывных списков. Или организации очереди?
    #32633367
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вроде бы это и называют иерархическим запросом.

http://gppl.moonbone.ru/README.html : "This is a patch which allows PgSQL to make hierarchical queries a la Oracle do".
...
Рейтинг: 0 / 0
Организация непрерывных списков. Или организации очереди?
    #32633383
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, ваш случай - стек, мне кажется, можно рассматривать как частный случай дерева.
...
Рейтинг: 0 / 0
Организация непрерывных списков. Или организации очереди?
    #32633522
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня НЕТ ссылок на предыдущие элементы списка. Так как при отсутствии "иерархических" запросов пришлось бы создавать рекурсивную ХП. У меня просто подмножество записей упорядочено по одному из полей, с непрерывной нумерацией в заданном диапазоне (открытом с одной сторой).
...
Рейтинг: 0 / 0
Организация непрерывных списков. Или организации очереди?
    #32633653
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня НЕТ ссылок на предыдущие элементы списка. У меня просто подмножество записей упорядочено по одному из полей, с непрерывной нумерацией в заданном диапазоне (открытом с одной сторой).

Если это данность, которую вы не можете изменить. То есть если по каким-либо причинам нельзя добавить в таблицу поле PrevId и удалить поле Priority. То, конечно же, вы не сможете использовать предложенный мною способ.

В таком случае видимо остается довольствоваться вариантом, который предложил Old Nick. Подумайте об эффективности узкого места в этом алгоритме: "нужно сделать апдейт всех значений увеличивая их на единицу".

В лагоритме с иерархическими запросами узким местом, конечно же, является "select ..." - оцените его эффективность при реализации через рекурсивную ХП в FB. И - выбирайте. :)

"Рекурсивная ХП" - это функция вызывающая сама себя? В постгресе я сделал иначе - LOOP внутри ХП. Может быть аналогично можно сделать в FB?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
create or replace function arid_prids(integer) returns setof integer as '
DECLARE
  myarid integer;
BEGIN
  myarid := $1;
  LOOP
    RETURN NEXT myarid;
    SELECT INTO myarid prid from pr_areas where arid = myarid;
    IF myarid = 0 OR NOT FOUND THEN
       EXIT;
    END IF;
  END LOOP;
  RETURN;
END;
' LANGUAGE 'plpgsql';
...
Рейтинг: 0 / 0
Организация непрерывных списков. Или организации очереди?
    #32634439
Фотография Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Организация непрерывных списков. Или организации очереди?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]