重新排列数据库表项顺序的最佳方法?

Best way to rearrange order of db tables items?

我有 db table 个项目,没有特定顺序。我希望用户能够根据他们认为的重要性对项目进行排序和排序。解决这个问题的最佳方法是什么?想想人们可以按照他们想要做的顺序订购的待办事项列表。

我在 php/codeigniter 中这样做,但非常欢迎整体方法的想法。谢谢。

换句话说,用户可以任意排列项目,而这个排序需要保存在数据库中?

正如一位评论者所指出的,数据库中的行没有固有的顺序。任何需要特定序列中的行的检索都需要通过 ORDER BY 子句声明所需的序列。

对于您的建议,与其合并一个列以将订购信息直接存储在您的数据中 table,我建议使用两列的一对一联接 table - 一个作为该行的主键,第二个用于存储包含用户序列的整数。这允许在不实际修改行本身的情况下更改序列(保留缓存等)。例如,table 如:

CREATE TABLE UserSequence(
    key INT UNSIGNED,
    sequence INT UNSIGNED)

其中 'key' 列是保存数据行的 table 主键的外键。

如果您使用较大的数字作为序列(例如,序数 x 1000),您将留下 space 供用户创建新项目(或重新排序现有项目),优先级在中间某处不对所有行重新编号的顺序。

然后按顺序检索很简单,只需在查询中加入 UserSequence table 并按序列列进行排序。

另请注意,您可以在序列列上放置一个唯一性约束,这将允许数据库告诉您何时需要回退并根据您选择的步幅值重新编号项目(例如 1000 ) 而不是进行中间序列插入(例如,序列值是通过 prev + (next - prev)/2 之类的东西选择的)。 key 列上的外键约束也是可取的。