На чистом SQL задача решается несложным запросом.
Пример.
Исходная структура:
CREATE TABLE test (entity INT, -- некая строка в структуре
position INT); -- её позиция при сортировке
Исходные данные для изменения:
@from - номер позиции элемента, который надо куда-то переместить;
@to - номер позиции, на которую его надо переместить.
Запрос:
UPDATE test
SET position := CASE WHEN position = @from
THEN @to
ELSE position + SIGN(@from - @to)
END
WHERE position BETWEEN LEAST(@from, @to) AND GREATEST(@from, @to);
DEMO fiddle.