Задать вопрос
@Artem0071
Безработный mr. Junior

Как сделать (регулируемую?) сортировку?

Есть пользователи 'users' (id, name)
и каждый пользователь может создать свои категории 'categories' (id, user_id, title)

Нужно сделать так, чтобы пользователь мог менять категории местами
Например:
1 - первая категория
2 - вторая категория
3 - третья категория

И он может просто переставить 3к на место 1к и получится вот так:
1 - третья категория
2 - вторая категория
3 - первая категория

На данный момент я просто добавил в 'categories' поле 'index'. Таким образом перед записью новой категории я просто считаю сколько всего категорий у пользователя и присваиваю этот номер index'у
При удалении категории, я делаю index-- всем категориям у которых index был больше чем у удаленной категории
при изменении порядка я получаю oldIndex и newIndex от перемещенной категории и в зависимости от того что больше или меньше меняю index у тех категорий который находится в промежутке от старого к новому

Но тут возникает проблема
если у нас 1000000 категорий и человек перетаскивает с 1000000 места на 1, то произойдет 1000000+1 записей в бд
потому что я не нашел как делать автоматически средствами mysql или laravel изменение +1/-1
поэтому приходится брать в laravel коллекцию элементов и выполнять foreach

Может есть решение получше?
  • Вопрос задан
  • 93 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
UPDATE `categories` 
  SET `index` = `index`+1 
  WHERE `index` BETWEEN :firstIndex AND :lastIndex
    AND `user_id` = :userId
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы