我有一个没有特定顺序的项目的数据库表。我希望用户能够按照他们认为的重要程度对项目进行排序和求助。解决这个问题的最佳方法是什么?想想某人可以根据他们想要的顺序订购的待办事项列表。
我在php / codeigniter中这样做,但总体方法的想法非常受欢迎。感谢。
答案 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
之类的东西选择序列值)。 1}}列上的外键约束也是可取的。