У Младена и Арво есть хорошие идеи, но, к сожалению, в MySQL вы не можете SELECT
и UPDATE
одной и той же таблицы в одном выражении (даже в подзапросе). Это известное ограничение MySQL.
Вот решение, которое использует пользовательские переменные MySQL:
SET @i := 0;
UPDATE mytable
SET sort_id = (@i := @i + 1)
ORDER BY sort_id;
Что бы это ни стоило, я бы в любом случае не стал этого делать. Если ваш sort_id
используется только для сортировки, а не как «номер строки», то после удаления строки, где id=6
, строки по-прежнему в отсортированном порядке. Значения не обязательно должны быть последовательными для сортировки.