Это мое мнение: мой столбец row_index имеет номер с шагом 10 (например, 0, 10, 20 и т. Д.). Когда пользователь обновляет одну из строк, вам необходимо знать, идет ли она вверх или вниз. Если вам нужно переместить 2-ю строку в 4-ю (спускаясь вниз, требуемый row_index = 30), вы устанавливаете row_index на 35; в противном случае (при повышении) установите значение 25. Установите это значение:
UPDATE your_table SET row_index = 35 WHERE your_id = 1234
Теперь у вас правильный порядок, но row_indexes испорчены. Чтобы это исправить, выполните следующие два запроса:
SET @pos:=-10;
UPDATE your_table SET row_index = @pos:=@pos+10 WHERE ...
Это обновит все ваши строки (или ту, которую вы выбрали с помощью оператора where) и установит столбец row_index без пробелов (0, 10, 20, 30 и т. Д.). Конечно, этот способ увеличивает нагрузку на операции записи, но я думаю, что это самый быстрый способ получить порядок во время операций чтения. Если вы удалите строку, вы можете просто выполнить запросы на исправление порядка.