Обновление данных о порядковом номере элементов списка

Shinoby

Новичок
Здравствуйте, что-то не могу придумать оптимальный алгоритм :)
Есть некая таблица в которой есть поле order (INT)
Записи из этой таблицы выводятся в список, отсортированый по полю "order". Элементы списка могут быть перетасованы при помощи drag & drop.
например было так:
#Item1 order1
#Item2 order2
#Item3 order3

Перемещаем #item3 в начало и получаем:
#Item3 order1
#Item1 order2
#Item2 order3

Проблема: как потом это все запомнить. Если кидать на сервер список ID и соответствующие им order, то придется выполнять кучу UPDATE Запросов, и если список разрастется, то это будет не очень хорошо.

Может можно как-то хитро сконструировать SQL запрос?
 

hell0w0rd

Продвинутый новичок
создай float поле и по нему сортируй

1 item1
2 item2
3 item3

=>
2 item 2
2.5 item 1
3 item 3
 

С.

Продвинутый новичок
Если кидать на сервер список ID и соответствующие им order, то придется выполнять кучу UPDATE Запросов, и если список разрастется, то это будет не очень хорошо.
Судя по всему эту операцию будут делать не 8 из 10 посетитетелей, а админ раз в квартал. Ничего страшного с базой не случится даже при разросшемся списке.
 

Shinoby

Новичок
Спасибо, страшного ничего не случиться, но хотелось бы что-то оптимальное придумать, потом пригодится.
Как вариант сериализовать сортировку во что-то вроде этого:
[
{
id: 1,
order: 1
},
{
id: 2,
order: 3
},
{
id: 3,
order: 2
}
]
Но БД менять не желательно, так что пока наверное так и оставлю UPDATE в цикле :)
 

Redjik

Джедай-мастер
ну кучу update в цикле можно и в транзакцию обернуть - будет побыстрее
 

WMix

герр M:)ller
Партнер клуба
PHP:
update ... set `order` = if(id=$id, $order, `order`+1) where id=$id OR order>=$order
Но этот вариант "создай float поле и по нему сортируй" лучше (затронута будет только одна строка)
 
Последнее редактирование:
Сверху