У меня есть таблица со столбцами (int id pkey, int group, double sortOrder)
, где sortOrder реализует заданный пользователем порядок сортировки в одной группе.На некоторых модификациях мне нужно изменить нумерацию порядка сортировки всех элементов в группе.Значения SortOrder в разных группах не зависят друг от друга (т. Е. Сравниваются только в одной группе)
SELECT id, sortOrder FROM tbl WHERE group=X ORDER BY SortOrder
Дает мне все элементы в этой группе в текущем порядке, в которых мне нужно было бы назначитьпоследовательные значения (1, 2, 3, ...) для SortOrder.
Q: Есть ли какой-либо разумный способ - предпочтительно переносимый в другие реализации SQL - сделать это без обновления каждой строкив индивидуальном порядке?
Дополнительная информация: я использую double, потому что это позволяет тривиально назначать новый порядок сортировки без изменения других элементов (MIN-1 для ранее, MIN + 1 для вставки в конце и (A +B) / 2 для вставки между A и B.) - это, конечно, ограничено двойным разрешением (~ 52 вставки в худшем случае).Я еще не уверен, стоит ли это дополнительной проверки на переполнение, но у меня все равно будет такая же проблема с любым другим типом данных.
Единственная другая идея, которая мне пришла в голову, - это симуляция бесконечного разрешения с помощью строк и пользовательских функций COLLATE и ADD / SUB / AVG.Тем не менее, это кажется очень непереносимым.