Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.07.2015, 18:40
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 571

Какие существуют библиотеки или алгоритмы генерации индексов для сортировки по-порядк
Пример:
В базе хранится массив

id| sortIndex
A | 1
B | 2
C | 3
D | 4

Допустим, мы поменяли в нем позицию элемента D. Стало:

id| sortIndex
A | 1
D | 2
B | 3
C | 4

Мы перестраиваем индексы всех элементов и передаем их на сервер. Или передаем только изменившийся элемент, а сервер сам все перестраивает. Проблема этого способа в том, что в базе будут изменены все элементы.

Можно сделать по-другому, например, так:

id| sortIndex
A | 1
D | 1,5
B | 2
C | 3

Тут мы вычисляем новый индекс как среднее арифметическое от индекса соседей. Соответственно в базе меняется только один элемент.

Вконтакте для аудиозаписей, вообще, использует не индексы, а ссылки на последующий/предыдущий элементы. Правда, сама сортировка в этом случае будет тяжеловесной (вместо отображения по возрастанию придется бегать по связанному списку).

В общем, кто какие решения знает?
Ответить с цитированием
  #2 (permalink)  
Старый 10.07.2015, 00:07
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от Shitbox2
Проблема этого способа в том, что в базе будут изменены все элементы
Почему все, и почему элементы, может быть порядок их сортировки, а не они сами?
Ответить с цитированием
  #3 (permalink)  
Старый 10.07.2015, 09:18
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от laimas
Почему все, и почему элементы, может быть порядок их сортировки, а не они сами?
тоже так думаю) похоже на обычный серверный swap

Сообщение от Shitbox2
Проблема этого способа в том, что в базе будут изменены все элементы
не будут

Сообщение от Shitbox2
Можно сделать по-другому, например, так
если сортировка не по sortIndex работать будет криво
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #4 (permalink)  
Старый 10.07.2015, 11:39
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от nerv_
похоже на обычный серверный swap
К сожалению в базе нет swap, хотя можно и процедуру написать ) Нужен обычный UPDATE колонке sortIndex - для тех записей, которые больше и равные новой позиции, +1, которые меньше, -1.
Ответить с цитированием
  #5 (permalink)  
Старый 10.07.2015, 23:23
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

Никаких эффективных алгоритмов в вашем случае на сервер надо передать изменившиеся данные, а значит
D | 2
B | 3
C | 4
все остальное обрабатываем на сервере
Ответить с цитированием
  #6 (permalink)  
Старый 13.07.2015, 13:22
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 571

Передавать тупо все данные проще всего, но слишком ресурсоемко, а поэтому применимо лишь для небольших списков.

Пробовал так же передавать массив айдишников в новом порядке (пример: http://tamtakoe.ru/photoalbum). Неплохо, но опять же для больших списков избыточно. Так же предыдущие способы не совместимы с пагинацией.

Сейчас задача сделать универсальный механизм сортировки для админки. А там могут быть списки из 20 элементов и из 2000 и больше. Естественно, везде пагинация. С другой стороны сортировка — достаточно редкая операция.
Ответить с цитированием
  #7 (permalink)  
Старый 13.07.2015, 14:01
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от Shitbox2
Передавать тупо все данные проще всего, но слишком ресурсоемко, а поэтому применимо лишь для небольших списков.
Передавать куда? Впечатление, что у вас вымышленная проблема. В любом случае на клиента передается все и не важно постранично или нет, и если в этом писке нужно определить новый порядок сортировки, то не передав на сервер значения, порядок нельзя изменить.

Не охота все перебирать, так запоминайте на сервере текущий порядок, а по приему формы обновляйте те записи, порядок которых изменился.

Сообщение от Shitbox2
С другой стороны сортировка — достаточно редкая операция.
Сортировка, это почти постоянная операция при выборе из базы, а вот задание порядка сортировки и ее изменение, так тут бабушка надвое сказала, бывает, что и часто.
Ответить с цитированием
  #8 (permalink)  
Старый 13.07.2015, 16:43
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 571

Логика есть. Порядок скорее всего будет меняться в пределах 1-2 страниц. А это не так уж много элементов. Тогда надо сохранить, например, 20 элементов с измененными позициями. Как это сделать по RESTу? Послать 20 запросов
POST /items/<id>
?
Ответить с цитированием
  #9 (permalink)  
Старый 13.07.2015, 17:32
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Пользовательская сортировка определяется для чего, для таблицы базы данных? Если да, то причем тут непосредственно способ передачи данных?
Ответить с цитированием
  #10 (permalink)  
Старый 14.07.2015, 11:38
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 571

Да, для БД. Тут важно всё и способ передачи данных в том числе. Если в одном месте станет красиво, а в другом коряво, то смысла в решении нет.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поиск классов внутри тега yozuul jQuery 24 14.06.2013 22:00