Вопрос

У меня есть таблица, содержащая задачи, и я хочу явно упорядочить их в зависимости от приоритета задачи.Единственный способ, которым я могу это сделать, - это через уникальный Столбец int, который указывает, где находится задача с точки зрения приоритета (т. е.1 – это топ-1000 – низкий уровень).

Проблема в том, что, скажем, я хочу обновить задачу и установить для нее более низкое значение приоритета, мне придется обновить все остальные строки между ее текущим значением и новым значением.

Может ли кто-нибудь предложить лучший способ реализации этого?

Это было полезно?

Решение

Используйте действительное числовое значение в качестве приоритета.Вы всегда можете вставить значение между двумя существующими значениями с помощью чего-то вроде newPri = task1Pri + (task2Pri - task1Pri)/2 где Задача 1 имеет числовое значение с более низким приоритетом (что, вероятно, является более высоким приоритетом).

Корин отмечает, что минимальные и максимальные приоритеты придется рассчитывать для задач, помещенных вверху или внизу списка приоритетов.

И Джоэлхарди напоминает нам, что Изменение порядка Процесс — хорошая идея время от времени наводить порядок на столе.

Другие советы

Вместо создания нумерованного столбца, как вы сказали, создайте поле, называемое чем-то вроде родительского.Каждая строка содержит pk своего родительского элемента.Если вы хотите переместить один элемент вниз, просто измените его родительский ПК на новый и элементы, которые ссылаются на него в своем родительском ПК.Подумайте об односвязных списках.

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

Я бы назначил только небольшое количество значений (1..10), а затем ORDER BY Priority DESC, DateCreated ASC.Если вам нужно иметь разные приоритеты для каждой задачи, вам нужно ОБНОВИТЬ ГДЕ Приоритет > xxx, как вы сказали.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top