6

我有一个包含任务的表,我想根据任务的优先级给这些任务一个明确的顺序。我能想到的唯一方法是通过一个唯一的int 列来索引任务在优先级方面的位置(即 1 是前 1000 是低的)。

问题是说我想更新任务并将其优先级设置为较低的值,我将不得不更新其当前值和新值之间的所有其他行。

任何人都可以提出更好的实施方式吗?

4

5 回答 5

7

使用实数值作为优先级。您始终可以在两个现有值之间滑动一个值,例如newPri = task1Pri + (task2Pri - task1Pri)/2Task1 具有较低优先级的数值(这可能是较高的优先级)。

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

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

于 2008-09-21T23:44:39.657 回答
3

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

于 2008-09-21T23:38:47.017 回答
1

我最喜欢凯文的回答,但如果你想要一个快速而简单的解决方案,只需按照你已经描述的方式进行操作,而不是增加 1,而是增加 10 或 100 ......如果你需要这样的话重新确定优先级,您在任务之间有一些回旋余地。

于 2008-09-21T23:48:41.830 回答
0

我将只分配少量值 (1..10),然后按优先级 DESC、DateCreated ASC 排序。如果您需要为每个任务设置不同的优先级,则需要像您说的那样更新 WHERE Priority > xxx。

于 2008-09-21T23:40:16.857 回答
0

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

于 2008-09-21T23:40:42.270 回答