【发布时间】:2011-12-16 16:21:56
【问题描述】:
我有一个表,其中包含 (int id pkey, int group, double sortOrder) 列,其中 sortOrder 在一个组中实现用户指定的排序顺序。在一些修改中,我需要重新编号组中所有项目的排序顺序。不同组中的 SortOrder 值彼此独立(即它们只在一个组内进行比较)
SELECT id, sortOrder FROM tbl WHERE group=X ORDER BY SortOrder
以当前顺序为我提供该组中的所有元素,我必须将顺序值 (1, 2, 3, ...) 分配给 SortOrder。
问:是否有任何合理的方法(最好可移植到其他 SQL 实现)而不单独更新每一行?
更多信息:我正在使用双打,因为这允许在不修改其他项目的情况下轻松分配新的排序顺序(MIN-1 用于之前,MIN+1 用于插入末尾,以及 (A+B)/2 用于插入在 A 和 B 之间。) - 这当然受到双分辨率的限制(在最坏的情况下约 52 次插入)。我还不确定这是否值得额外检查溢出,但无论如何我都会遇到任何其他数据类型的相同问题。
我想出的唯一其他想法是使用字符串和自定义 COLLATE 和 ADD/SUB/AVG 函数来模拟无限分辨率。但是,这似乎非常不便携。
【问题讨论】: