Sql server SQL Server优先级排序

Sql server SQL Server优先级排序,sql-server,data-structures,Sql Server,Data Structures,我有一个包含任务的表,我想根据任务的优先级对这些任务进行显式排序。我能想到的唯一方法是通过一个唯一的int列,该列根据优先级索引任务所在的位置,即1是top 1000是低的 问题是,如果要更新任务并将其优先级设置为较低的值,则必须更新其当前值和新值之间的所有其他行 有人能提出更好的实现方法吗?不要像你说的那样创建一个编号列,而是创建一个名为parent的字段。每行包含其父项的主键。当你想向下移动一个项目时,只需将其父pk更改为新的pk以及在父pk中引用它的项目。考虑单个链表。我只会分配一小部分值

我有一个包含任务的表,我想根据任务的优先级对这些任务进行显式排序。我能想到的唯一方法是通过一个唯一的int列,该列根据优先级索引任务所在的位置,即1是top 1000是低的

问题是,如果要更新任务并将其优先级设置为较低的值,则必须更新其当前值和新值之间的所有其他行


有人能提出更好的实现方法吗?

不要像你说的那样创建一个编号列,而是创建一个名为parent的字段。每行包含其父项的主键。当你想向下移动一个项目时,只需将其父pk更改为新的pk以及在父pk中引用它的项目。考虑单个链表。

我只会分配一小部分值1..10,然后按优先级顺序DESC,DateCreated ASC。
如果您需要为每个任务设置不同的优先级,您需要像您所说的那样更新WHERE Priority>xxx。

如果没有两个任务具有相同的优先级,那么我认为您必须这样做。但是您可以有一个priority和一个datemodified列,如果您允许复制优先级,则只需根据这两个列进行排序,就可以根据优先级和上次更新获得正确的顺序

使用实数值作为优先级。您始终可以使用newPri=task1Pri+task2Pri-task1Pri/2这样的值在两个现有值之间滑动,其中Task1的优先级较低,而优先级可能较高

科林指出,对于插入优先级列表顶部或底部的任务,必须计算最小优先级和最大优先级


joelhardi提醒我们,重新排序过程是不时清理表格的好主意。

我最喜欢Kevin的答案,但如果你想要一个快速而肮脏的解决方案,只需按照前面描述的方式进行,而不是增加1、增加10或100。。。这样,如果你需要重新划分优先级,你在任务之间会有一些回旋余地。

你是说没有两个任务可以具有相同的优先级?不,优先级值是唯一的。有点像一个链接列表,我很惊讶?我喜欢这个:db不会保护你的“任务链”。如果应用程序断开链接,db将不关心,您的系统将断开。呵呵。DBList:p就是这样。不幸的是,它比直接排序更复杂,但它解决了在不重做整个列表的情况下移动项目的问题。但是,在Select语句中如何排序呢。我应该说,我来自一所学校,它认为修改系统的人应该能够在没有安全网的情况下编程,这是一个有趣的想法。我必须记住这一点。这是个好主意,尽管我不确定它是否实用。因为这也会使插入变得棘手。i、 e.在您创建第一条记录后,下一条插入优先级是否变为MAXrealNumber?如果是这样的话,当您插入另一个优先级较低的值时会发生什么?谢谢!现在我感觉很糟糕-哈哈,我想你仍然可以用完的价值,虽然我没有停下来,以找出限制。实际上我也有点喜欢Skliwz的答案。Corin-我没有考虑过在列表的末尾添加任务:这就是我要做的,除非我需要在新任务上自动递增,然后,我执行kogus的解决方案,将整数自动递增100或1000,然后编写cronjob,检查项目之间的小间隙(大量移动项目的结果),以指示是否需要对所有项目进行重新排序操作。