SQL Server优先顺序
时间:2020-03-06 14:31:05 来源:igfitidea点击:
我有一个包含任务的表,我想根据任务的优先级对它们进行显式排序。我唯一想到的方法是通过一个唯一的int列,该列按优先级对任务进行索引(即1表示前1000位是低位)。
问题是说我想更新任务并将其优先级设置为较低的值,我将不得不更新其当前值与新值之间的所有其他行。
谁能建议一种更好的方法来实现这一目标?
解决方案
与其像我们所说的那样创建一个编号的列,不如创建一个类似于parent的字段。每行包含其父项的pk。当我们要向下移动一项时,只需将其父pk更改为新项,然后将其在其父pk中引用该项目。考虑单链列表。
我只分配少量值(1..10),然后分配ORDER BY Priority DESC,DateCreated ASC。
如果我们需要为每个任务设置不同的优先级,则需要像我们所说的那样更新WHERE Priority> xxx。
如果没有两个任务可以具有相同的优先级,那么我认为这是我们必须要做的。但是我们可以有一个优先级和一个经过日期修改的列,并且只要允许重复优先级,就可以按优先级和最后一次更新对它们进行排序以获得正确的顺序。
使用实数值作为优先级。我们总是可以在两个现有值之间滑动一个值,例如`newPri = task1Pri +(task2Pri task1Pri)/ 2',其中Task1具有较低的优先级数值(可能是较高的虚假度)。
Corin指出,必须为插入优先级列表顶部或者底部的任务计算最小和最大优先级。
并且joelhardi提醒我们,重新排序过程是不时清理表的好主意。
我最喜欢Kevin的答案,但是如果我们想要一个快速而又肮脏的解决方案,请按照我们已经描述的方法进行操作,而不是将其递增1,而是将其递增10或者100 ...如果我们需要重新设置优先级,我们在任务之间会有一些回旋的余地。