Обзор высокого уровня с простым целым числом order
значение, чтобы понять мою точку зрения:
id (primary) | order (sort) | attributes ..
----------------------------------------------------------
ft8df34gfx 1 ...
ft8df34gfx 2 ...
ft8df34gfx 3 ...
ft8df34gfx 4 ...
ft8df34gfx 5 ...
Обычно было бы легко изменить order
(например, если пользователь перетаскивает элементы списка на входной стороне): перемещать элемент вокруг, вычислять новые значения order
и обновлять затронутые элементы в БД с новыми order
.
Ограничения:
- Не имеет всех предметов одновременно, только их подмножество (подумайте, нумерация страниц)
- Обновлять только один элемент в дБ, если перемещен один элемент (1 элемент в смену)
Моя первоначальная идея:
Используйте эпоху как order
и добавьте что-то уникальное, чтобы избежать дублирования времени эпохи, например, <epoch>#<something-unique-to-item>
. Начальное значение - время вставки (поэтому порядок по умолчанию сначала самый новый).
Клиент / сервер (который вычисляет order
) знает эпоху для каждого элемента в подмножестве элементов, которые он имеет.
Если элемент смещен, посмотрите на эпоху предыдущего и следующего элемента (если есть предыдущий или следующий - может быть перемещен на первый или последний), выберите значение между и обновите. Более 1 смены? Повторите процесс.
Но ..
- Если элементы сдвинуты достаточно много раз, значения эпох становятся ближе и ближе друг к другу, пока вы не можете найти середину с целыми числами.
- Добавить много нулей в эпоху при вставке? Все еще достигать предела в какой-то момент.
- Если элемент смещен на первый или последний элемент и на предыдущей или следующей странице есть элементы (помните, нумерация страниц), мы не знаем этих значений и не можем надежно найти «значение между».
- Выбрать 1 дополнительный скрытый элемент с предыдущей и следующей страницы? Запросы усложняются ..
Это вообще возможно? Какой тип / значение я должен использовать как order
?