Mam listę w bazie danych, którą użytkownik powinien móc zamówić.Zaktualizuj listę rzeczy bez uderzania w każdy wpis
itemname| order value (int)
--------+---------------------
salad | 1
mango | 2
orange | 3
apples | 4
Po załadowaniu z bazy danych po prostu order by order_value
.
poprzez przeciągnięcie „n upuść, powinien on być w stanie poruszać apples
tak, że pojawia się na szczycie listy ..
itemname| order value (int)
--------+---------------------
apples | 4
salad | 1
mango | 2
orange | 3
Ok. Teraz wewnętrznie muszę aktualizować KAŻDĄ LISTĘ! Jeśli lista zawiera 20 lub 100 elementów, oznacza to wiele aktualizacji dla prostej operacji przeciągania.
itemname| order value (int)
--------+---------------------
apples | 1
salad | 2
mango | 3
orange | 4
Wolę zrobić to z tylko jedną aktualizacją. Jednym ze sposobów, o których myślałem było to, że "wewnętrzny porządek" jest wartością double
.
itemname| order value (double)
--------+---------------------
salad | 1.0
mango | 2.0
orange | 3.0
apples | 4.0
więc po przeciągania n”operacji upuszczenia przypisać apples
ma wartość, która jest mniejsza niż elementu, którym ma zostać umieszczona z przodu:
itemname| order value (double)
--------+---------------------
apples | 0.5
salad | 1.0
mango | 2.0
orange | 3.0
.. i, jeśli element jest wciągnięty w środku gdzieś, jego order_value
jest większy niż ten, który pojawia się po .. tutaj przeniosłem orange
się między salad
i mango
:
itemname| order value (double)
--------+---------------------
apples | 0.5
salad | 1.0
orange | 1.5
mango | 2.0
Jakieś przemyślenia na temat lepszych sposobów na zrobienie tego?
Jeśli jest to dane generowane przez człowieka, to w maksimum jest to prawdopodobnie dziesiątki elementów. Większość ludzi straciłaby zainteresowanie ręcznie, sortując więcej niż kilkadziesiąt (a interfejs do tego będzie się łamał po około 20, chyba że masz naprawdę duży ekran). Po prostu to zrób. Inaczej by było, gdybyś uciekał się do tysięcy lub milionów przedmiotów. – Seth
Czy musisz zezwolić na równoczesne aktualizacje? –