2009-07-29 1 views
1

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

Базовая таблица:

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, обновление по меньшей мере, идентификатор = (2,3,4)
будет, конечно, произвести желаемый результат:

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

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

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

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

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

+0

Ооо, это делает новый треск, который делает – skaffman

+0

очень редко используемым новым тегом? –

+0

лучший вид !! – skaffman

ответ

0

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

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

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

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

+0

со связанным списком с идентификаторами (обычно в oop). У меня возникла бы проблема с рекурсивным оператором select, чтобы получить упорядоченные данные. как бы вы могли написать инструкцию sql (-92)? – 2009-07-29 22:33:06

+0

Вы можете легко отсортировать его на стороне клиента. Выберите упорядочение по столбцу ссылки, чтобы сначала получить нулевое значение (предполагая, что он дважды связан, иначе вам нужен головной узел), а затем прокрутите его до тех пор, пока не получите еще один нуль. Я предполагаю, что вы все равно сортируете на стороне клиента для обновления. Вы можете сделать это, используя хранимую процедуру. – Charlie

Смежные вопросы