Сохранить порядок списка HTML без обновления каждой строки в базе данных? - PullRequest
3 голосов
/ 28 мая 2009

У меня есть список HTML, который можно отсортировать (используя сортируемый API jQuery ). Я храню элементы списка в базе данных; В каждой строке хранится порядок элемента и текст. Как сохранить порядок элементов списка, чтобы мне не нужно было обновлять несколько строк при изменении порядка элементов? Элементы списка можно добавлять и удалять.

Вот пример того, о чем я говорю:

<ol>
  <li>Go shopping</li> <!-- Order: 1 -->
  <li>Go jogging</li> <!-- Order: 2 -->
  <li>Eat</li> <!-- Order: 3 -->
</ol>

Пользователь перемещает элемент списка «Съесть» вверх, теперь я должен обновить каждую строку в базе данных, чтобы сохранить порядок.

<ol>
  <li>Eat</li> <!-- Order: 3, now update to 1 -->      
  <li>Go shopping</li> <!-- Order: 1, now update to 2 -->
  <li>Go jogging</li> <!-- Order: 2 now update to 3 -->
</ol>

1 Ответ

2 голосов
/ 28 мая 2009

То, что я сделал в тот раз, когда мне пришлось это сделать, - это какая-то запись «заголовка», в которой сохранялись идентификаторы всех «элементов» в порядке, разделенных запятыми ...
Итак, в вашем случае я бы сохранил 1,2,3 в первой версии и 3,1,2 во второй.

Это абсолютно не нормализуется и выглядит ужасно, но:

  • Когда пользователь меняет порядок, вы обновляете только ОДНУ строку. Это было важно, наши списки могли стать большими.
  • Когда пользователь добавляет элемент, этот элемент естественным образом попадает в начало или конец списка, в зависимости от того, как вы извлекаете элементы, чтобы показать их.

Когда вы хотите показать список, вы читаете элементы и помещаете их в хеш-таблицу, упорядоченную по их идентификатору. Затем вы читаете строку, которая устанавливает порядок, разделяете ее запятыми, и для каждого идентификатора вы находите соответствующий элемент в своей хеш-таблице и добавляете его в «список» или «коллекцию».
Затем, если у вас есть элементы в вашей хеш-таблице, вы добавляете их в список в начале или в конце, в зависимости от того, где вы хотите, чтобы появлялись новые вещи.

Только мои 2 цента

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...