Порядок приоритетов SQL Server - PullRequest
6 голосов
/ 22 сентября 2008

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

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

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

Ответы [ 5 ]

7 голосов
/ 22 сентября 2008

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

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

И Джоэлхарди напоминает нам, что процесс переупорядочения 1007 * - это хорошая идея время от времени очищать таблицу.

3 голосов
/ 22 сентября 2008

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

1 голос
/ 22 сентября 2008

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

0 голосов
/ 22 сентября 2008

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

0 голосов
/ 22 сентября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...