【问题标题】:Best way to store sort order/priority?存储排序顺序/优先级的最佳方式?
【发布时间】:2012-07-15 15:45:21
【问题描述】:

我正在使用 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
)

我想设置一种简单的方法来管理行的优先级,这样我就可以轻松地对它们进行排序,而无需编写大量代码来管理所有内容。

【问题讨论】:

  • 我相信,如果不使用诸如“优先级”列交换或更新之类的技巧,就可以更详细地回答这个问题。你能列出优先级计算的公式吗? “移动行”背后的原因是什么?我怀疑可能会产生一个合适的ORDER BY
  • 考虑链表方法。这避免了在列表中向上或向下移动行时必须更新所有其他行。使用链表,您最多只需要更新三行(包括您要移动的行)。当然,很难查询它,所以你可能只在代码中实现这个顺序。
  • 此应用程序对我们的客户进行财务分析。我们的用户需要能够通过将某些财务移至顶部并将较低优先级的财务移至底部来确定它们的优先级。此过程是手动的,因为使用 ORDER BY 执行自动排序的因素太多。有时用户需要将一行从中间移到顶部,有时将第二行移到底部。

标签: mysql sorting


【解决方案1】:

我最终遵循了这个问题的建议:https://stackoverflow.com/a/6804302/731052

我设置了排序顺序列 = id * 1000,这样我就可以获得唯一的订单。到目前为止,这工作得很好,没有任何问题。

【讨论】:

    猜你喜欢
    • 2019-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多