Упорядочение по приоритетам SQL Server

Я считаю, что это самый быстрый запрос, который отвечает на ваш вопрос, потому что он не использует интерпретированное предложение $where:

{$nor: [
    {name: {$exists: false}},
    {name: {$size: 0}},
    {name: {$size: 1}}
]}

Это означает «все документы, кроме тех, которые не имеют имени (либо несуществующий или пустой массив) или с одним именем. "

Тест:

> db.test.save({})
> db.test.save({name: []})
> db.test.save({name: ['George']})
> db.test.save({name: ['George', 'Raymond']})
> db.test.save({name: ['George', 'Raymond', 'Richard']})
> db.test.save({name: ['George', 'Raymond', 'Richard', 'Martin']})
> db.test.find({$nor: [{name: {$exists: false}}, {name: {$size: 0}}, {name: {$size: 1}}]})
{ "_id" : ObjectId("511907e3fb13145a3d2e225b"), "name" : [ "George", "Raymond" ] }
{ "_id" : ObjectId("511907e3fb13145a3d2e225c"), "name" : [ "George", "Raymond", "Richard" ] }
{ "_id" : ObjectId("511907e3fb13145a3d2e225d"), "name" : [ "George", "Raymond", "Richard", "Martin" ] }
>
6
задан kemiller2002 21 September 2008 в 23:40
поделиться

5 ответов

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

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

И joelhardi напоминает нам, что процесс переупорядочивания является хорошей идеей время от времени очищать таблицу.

7
ответ дан 9 December 2019 в 22:42
поделиться

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

3
ответ дан 9 December 2019 в 22:42
поделиться

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

0
ответ дан 9 December 2019 в 22:42
поделиться

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

1
ответ дан 9 December 2019 в 22:42
поделиться

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

0
ответ дан 9 December 2019 в 22:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: