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

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

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

有帮助吗?

解决方案

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

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

joelhardi提醒我们,重新订购流程是不时清理桌面的好主意。

其他提示

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

我最喜欢凯文的答案,但是如果你想要一个快速而肮脏的解决方案,那就按照你已经描述过的方式进行,但不是递增1,而是增加10或100 ......如果你需要重新确定优先级,你在任务之间有一些摆动空间。

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

如果没有两个任务可以具有相同的优先级,那么我认为这就是你必须要做的。但是,如果允许重复优先级,则可以使用优先级和datemodified列,并按两者排序以根据优先级和上次更新获得正确的顺序。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top