выборочная сортировка или заказ столика без использования всего шебанга - PullRequest
1 голос
/ 30 июля 2009

В течение десяти лет мы использовали одну и ту же пользовательскую сортировку в наших таблицах, и мне интересно, есть ли другое решение, которое включает меньше обновлений, тем более что сегодня мы хотели бы иметь дату репликации / публикации и не будем ' Мне бы хотелось, чтобы наша репликация копировала ненужные записи. Я посмотрел на вложенные множества, но, похоже, он нам не подходит.

Базовый стол:

id | a_sort
---+-------
1    10
2    20
3    30

После вставки:

insert into table (a_sort) values(15)

Запись на второй позиции.

id | a_sort
---+-------
1    10
2    20
3    30
4    15

Заказ стола с:

select * from table order by a_sort

и использование всех записей a_sort с обновлением как минимум id = (2,3,4)
конечно, даст желаемый результат:

id | a_sort
---+-------
1    10
4    20
2    30
3    40

Имена столбцов, количество столбцов, типы данных, возможное объединение, возможные триггеры или способ, которым выполняется преобразование, не имеют отношения к проблеме. Также мы нашли несколько довольно удобных способов быстрого выполнения этой задачи.

только; Как, черт возьми, мы можем уменьшить количество обновлений в БД до 1 или 2 максимум.

Похоже, очень распространенная проблема.

Капитан, очевидно, во мне однажды «использует a_sort float (53), вставляет с использованием фиксированного значения ordervaluefirstentry + abs (ordervaluefirstentry-ordervaluenextentry) / 2».
Но это позволило бы только около 1040 «промежуточных» записей - так что никогда не прибегать к помощи немного проблематично;)

1 Ответ

0 голосов
/ 30 июля 2009

Вы действительно не описали, что вы делаете с этими данными, так что простите, если это безумная идея для вашей ситуации:

Вы можете создать своего рода «связанный список», где вместо столбца значений у вас есть столбец с идентификатором «следующий по величине». Это уменьшит количество обновлений до максимум 2.

Вы можете сделать его двусвязным, а также иметь столбец для следующего наименьшего значения, который увеличит максимальное количество обновлений до 3.

См: http://en.wikipedia.org/wiki/Linked_list

...