假设我有一个用户表。
就像是:

ID integer,
USER text,
POSITION integer


我的数据库元组可以是:

(1, "user1", 1);
(2, "user2", 2);
(3, "user3", 3);


我的应用列出了所有用户,并且可以重新排序。
例如:
您可以使user3在user2之前。

(1, "user1", 1);
(2, "user2", 3);
(3, "user3", 2);


另外,您可能想将某人移到第一位。
例如:如果您有...

(1, "user1", 1);
(2, "user2", 2);
(3, "user3", 3);


...然后将user3移到第一位,数据库应为:

(1, "user1", 2);
(2, "user2", 3);
(3, "user3", 1);


使用POSITION列是正确的方法吗?
有没有一种方法可以在不对数据库造成太大影响的情况下完成此任务?

最佳答案

您不能做得比您建议的好得多-每次进行更改时,将更改的元素更新到数据库。偶尔这可能意味着要进行较大的更新而要进行较小的更改(例如,在长列表的开头添加元素)。

一个较小的改进是消除了位置必须是从1开始的连续数字的限制。您可以改为允许位置为100、200、300,并使用ORDER BY来以正确的顺序获取行。这样,可以在两个现有项目之间插入新项目,而不必修改任何其他元素,至少直到序列用尽空白并且您需要对其进行“碎片整理”为止。

但是,我认为,为实施该系统付出额外的努力可能不值得。简单的解决方案在大多数情况下都能正常工作。

关于sql - 根据用户交互对行进行排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2383646/

10-16 15:38