Есть таблица со столбцами id, sort причем sort может идти не по порядку. Есть немного замороченный запрос для перемещения строчки на любую позицию и сдвигом значений сорт у предыдущего/следующего элемента:
SET @start=37;
UPDATE tablename m INNER JOIN (SELECT @start AS oldsort, (@start:=testsort.sort) AS newsort from tablename AS testsort WHERE testsort.sort BETWEEN @start AND 39 ORDER BY testsort.sort DESC ) p ON m.sort = p.oldsort SET m.sort = newsort WHERE sort<=39 AND sort>37;
UPDATE tablename SET sort=39 WHERE id={ид_перемещаемого элемента}
В этом примере перемещаем 37 элемент на позицию 39го, соответственно у sort=38, новый sort становится равным 37, а у sort=39, новый sort станет равным 38.
Запрос вполне корректно работает, но после простановки индекса на поле sort, ломается, и не затрагивает ни одной строки! С чем это может быть связано? Буду очень признателен любым подсказкам в решении данного вопроса...