powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Есть ли тип данных порядок?
5 сообщений из 5, страница 1 из 1
Есть ли тип данных порядок?
    #39498255
manking
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот есть задача хранить порядок строк.
Чтобы можно было быстро и удобно менять их местами.
И если создать столбец order с типом integer, то при изменении значения order в какой то строке,
другие значения в столбце не пересчитываются.

Например есть таблица:
Код: plaintext
1.
2.
3.
4.
Строка Порядок
1        1
2        2
3        3
4        4

Дальше мы меняем в строке 3 порядок на 1.
И получается
Код: plaintext
1.
2.
3.
4.
Строка Порядок
1        1
2        2
3        1
4        4

А нужно пересчитать порядок остальных строк тоже
Код: plaintext
1.
2.
3.
4.
Строка Порядок
1        2
2        3
3        1
4        4

Как правильней это организовать? Можно ли это сделать без пересчёта всех остальных значений?
...
Рейтинг: 0 / 0
Есть ли тип данных порядок?
    #39498277
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mankingВот есть задача хранить порядок строк.
Чтобы можно было быстро и удобно менять их местами.
И если создать столбец order с типом integer, то при изменении значения order в какой то строке,
другие значения в столбце не пересчитываются.

Например есть таблица:
Код: plaintext
1.
2.
3.
4.
Строка Порядок
1        1
2        2
3        3
4        4

Дальше мы меняем в строке 3 порядок на 1.
И получается
Код: plaintext
1.
2.
3.
4.
Строка Порядок
1        1
2        2
3        1
4        4

А нужно пересчитать порядок остальных строк тоже
Код: plaintext
1.
2.
3.
4.
Строка Порядок
1        2
2        3
3        1
4        4

Как правильней это организовать? Можно ли это сделать без пересчёта всех остальных значений?

Вариантов как всегда - несколько
1)Использовать более подходящий тип столбца сортировки
Например,
Код: sql
1.
DOUBLE PRECISION


2)
Код: sql
1.
BIGINT

с инкрементом по 100 к примеру, позволит достичь примерно того же, что и в
первом случае.
3)
Код: sql
1.
TIMESTAMP

тип с максимальной точностью и туда пихать при записи
clock_timestamp() тоже можно,но желательно, если вставка идёт по одной записи, иначе
некоторые значения будут одинаковыми.
4)
Использовать ссылки на предыдущую запись и на следующую запись(2 внешних ключа).
Лучше сделать необязательные (для удобства изменения сортировки). И чтобы каскадно проставлялись
NULL при удалении записи обязательно. Селекты будут чутка посложнее,больше места для хранения
потребуется, но и переписывать много не надо при изменении сортировок. Как то так.
...
Рейтинг: 0 / 0
Есть ли тип данных порядок?
    #39498301
Alexander A. Sak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я это решал апдейтом типа такого:
Код: plsql
1.
2.
3.
4.
update Таблица t set
   t.Порядок = case when t.Порядок=3 then 1 else 3 end
where t.Порядок in (3, 1)
  and ЧТО_ТО_ЕЩЕ
...
Рейтинг: 0 / 0
Есть ли тип данных порядок?
    #39498304
ncux199rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mankingВот есть задача хранить порядок строк.
Дальше мы меняем в строке 3 порядок на 1.
И получается
Код: plaintext
1.
2.
3.
4.
Строка Порядок
1        1
2        2
3        1
4        4

А нужно пересчитать порядок остальных строк тоже
Код: plaintext
1.
2.
3.
4.
Строка Порядок
1        2
2        3
3        1
4        4

По какому параметру надо перестраивать строку и порядок?
...
Рейтинг: 0 / 0
Есть ли тип данных порядок?
    #39498481
p2.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander A. SakЯ это решал апдейтом типа такого:
Код: plsql
1.
2.
3.
4.
update Таблица t set
   t.Порядок = case when t.Порядок=3 then 1 else 3 end
where t.Порядок in (3, 1)
  and ЧТО_ТО_ЕЩЕ

В case нужно не обменивать, а устанавливать старое значение в новое. Остальные строки между least и greatest добавлять 1 или вычитать 1 в зависимости от отношения старое-новое значение.
Но вариант с делимым шагом предпочтительнее, так как требуется только выборка двух строк, между кем вставка, и апдейт одной строки.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Есть ли тип данных порядок?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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