重新排列db表项的顺序的最佳方法是什么?

时间:2016-07-23 19:25:23

标签: php mysql sql codeigniter codeigniter-3

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

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

1 个答案:

答案 0 :(得分:1)

换句话说,用户可以按任意顺序排列项目,并且需要在数据库中保留该顺序吗?

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

对于您的建议,我建议使用一列一对一的连接表,而不是将一列用于直接存储在数据表中,我建议使用两列 - 一个是行的主键,一个second用于存储保存用户序列的整数。这允许序列改变而不实际修改行本身(保留高速缓存等)。例如,表格如下:

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

其中'key'列是包含数据行的表的主键的外键。

如果对序列使用较大的数字(例如,序数x 1000),则会为用户留出空间,以便在序列中间的某个位置创建新项目(或重新排序现有项目),而无需重新编号所有行

按顺序检索然后只需加入查询中的UserSequence表和序列列的ORDER BY。

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