У меня есть список в базе данных, который пользователь должен иметь возможность заказать.
itemname| order value (int)
--------+---------------------
salad | 1
mango | 2
orange | 3
apples | 4
При загрузке из базы данных я просто order by order_value
.
С помощью перетаскивания он должен переместиться на apples
так, чтобы оно появилось вверху списка.
itemname| order value (int)
--------+---------------------
apples | 4
salad | 1
mango | 2
orange | 3
Ok. Так что теперь внутри я должен обновить каждый пункт списка! Если в списке 20 или 100 элементов, это много обновлений для простой операции перетаскивания.
itemname| order value (int)
--------+---------------------
apples | 1
salad | 2
mango | 3
orange | 4
Я бы лучше сделал это только с одним обновлением. Один из способов, о котором я подумал, - это если «внутренний порядок» равен double
.
itemname| order value (double)
--------+---------------------
salad | 1.0
mango | 2.0
orange | 3.0
apples | 4.0
ТАК после операции перетаскивания я назначаю apples
значение, которое меньше, чем элемент, перед которым он должен появиться:
itemname| order value (double)
--------+---------------------
apples | 0.5
salad | 1.0
mango | 2.0
orange | 3.0
.. и если предмет куда-то перетаскивается в середину, его order_value
больше, чем тот, после которого он появляется .. здесь я переместил orange
, чтобы быть между salad
и mango
:
itemname| order value (double)
--------+---------------------
apples | 0.5
salad | 1.0
orange | 1.5
mango | 2.0
Есть мысли о лучших способах сделать это?