Ordem de prioridade SQL Server
-
02-07-2019 - |
Pergunta
Eu tenho uma tabela que contém tarefas e quero dar a estes uma ordenação explícita com base na prioridade da tarefa. A única maneira de pensar de fazer isto é por meio de uma única coluna
O problema é que disse que queria tarefa de atualização e definir sua prioridade para um valor inferior, eu teria que atualizar todas as outras linhas entre o seu valor actual e o novo valor.
alguém pode sugerir uma melhor forma de implementar isso?
Solução
Use um valor de número real como a prioridade. Você sempre pode deslizar em um valor entre dois valores existentes com algo como newPri = task1Pri + (task2Pri - task1Pri)/2
onde Task1 tem o valor numérico menor prioridade (que é provavelmente o maior piority).
pontos Corin que mínimo e máximo prioridades teria que ser calculado para tarefas inseridas na parte superior ou inferior da lista de prioridades.
E joelhardi nos lembra que um reordenar processo é uma boa idéia para limpar a mesa de vez em quando.
Outras dicas
Em vez de criar uma coluna numerada como você disse, crie um campo chamado algo como pai. Cada linha contém o pk de seu item pai. Quando você quiser mover um item para baixo apenas mudar sua pk pai para o novo e o item (s) que fazem referência a ele em sua pk pai. Pense listas individualmente vinculados.
Eu como a resposta de Kevin melhor, mas se você quer uma solução rápida e suja, basta fazê-lo da maneira que você já descrito, mas em vez de incrementar em 1, incremento de 10 ou 100 ... dessa forma, se você precisa re-priorizar, você tem algum espaço de manobra entre as tarefas.
Gostaria de atribuir apenas um pequeno número de valores (1..10) e ORDER BY DESC depois Prioridade, DateCreated ASC. Se você precisa ter prioridades diferentes para cada tarefa que você precisa atualizar onde a prioridade> xxx como você disse.
Se há duas tarefas pode ter a mesma prioridade, então eu acho que é o que você tem que fazer. Mas você poderia ter uma prioridade e uma coluna DateModified e apenas uma espécie de ambos para obter a ordem correta com base na prioridade e última atualização, se você permitir prioridade a ser duplicado.