Eu tenho esta tabela:
SELECT * FROM items
id | item | position
---|-----------|----------
1 | USB cable | 0
2 | SD card | 4
3 | Mouse | 2
4 | Keyboard | 0
5 | Monitor | 3
A classificação desta tabela fornece este resultado:
SELECT * FROM items ORDER BY position
id | item | position
---|-----------|----------
4 | Keyboard | 0
1 | USB cable | 0
3 | Mouse | 2
5 | Monitor | 3
2 | SD card | 4
Agora quero atualizar a tabela e salvar a ordem na coluna de posição:
SELECT * FROM items
id | item | position
---|-----------|----------
4 | Keyboard | 1
1 | USB cable | 2
3 | Mouse | 3
5 | Monitor | 4
2 | SD card | 5
Isso pode ser feito com uma única consulta ou tenho que repetir manualmente todas as linhas e fazer uma atualização manual?
Caso o pedido não esteja totalmente definido (por exemplo, para cabo USB e teclado acima), decidi arbitrariamente o pedido.
Nota: a ordem de "Teclado" e "cabo USB" é arbitrária. Ambos têm posição = 0
Para desempate as posições com base no item, adicione uma classificação secundária
Se você tiver posição duplicada, pares de itens também serão arbitrários...
Aqui está como conseguir isso no MySQL:
Usei seus dados de amostra da pergunta, carreguei-os no MySQL 5.5.15 em meu laptop e executei essas duas linhas. Aqui está o resultado: