2012-07-16 200 views
7

我正在使用MySQL。我有一张表,我需要能够手动设置排序的优先级/顺序。我原本以为给每行分配一个任意的顺序(1,2,3等),然后只是将该顺序与被移动的行进行“交换”,但我认为这不是最好的方式。存储排序顺序/优先级的最佳方法是什么?

在阅读了这里的相关问题(like this one)之后,很多人都说过要根据id列(id * 1000)为优先级列赋值。要重新排列行,您可以划分/减去列之间的差异。我不太明白这是如何工作的。

这是我需要排序的表的布局。

CREATE TABLE liability_detail (
    id int NOT NULL AUTO_INCREMENT, 
    analysis_id int NOT NULL, //(many-to-one relationship with analysis table) 
    other_columns various datatypes 
    sequence int DEFAULT 0 
) 

我想建立一个简单的方法来管理行的优先级,所以我可以很容易,而无需编写大量的代码来管理一切排序。

+0

我相信稍微详细一点就可以回答这个问题,而不需要像交换或更新的“优先级”列这样的技巧。你能列出优先计算公式吗? “移动行”的理由是什么?我怀疑一个合适的'ORDER BY'可能会产生 – 2012-07-16 18:39:57

+0

考虑链表方法。这样可以避免在列表中向上或向下移动行时必须更新所有其他行。使用链接列表,您只需更新至多三行(包括您正在移动的那一行)。当然,很难对它进行查询,所以你可能只在代码中实现订单。 – 2012-07-16 18:44:38

+0

此应用程序对我们的客户进行财务分析。我们的用户需要能够优先考虑一些财务状况,方法是将其转移到最高位置,并将较低优先级的财务状况移至最低位置。这个过程是手动的,因为使用ORDER BY执行自动排序的因素太多了。有时用户需要从中间移动一行到最上面,有时候需要将第二行移到最下面。 – Jeff 2012-07-16 18:46:42

回答

3

我结束了以下这个问题的建议:https://stackoverflow.com/a/6804302/731052

我设置的排序顺序列= ID * 1000个这样我就可以得到独特的订单。到目前为止,这工作得很好,并没有任何问题。