Pues creo tu algoritmo es el mas indicado aunque eso lo que haria tmb seria reordenar los campos no continuos asi que debes en tu query hacer:
Código:
SELECT * FROM orden ORDER BY orden ASC
Para que los registros se ordenen de manera secuencial, posteriormente tendrias que seleccionar la orden 1 y de ahi empezar a contar, si se salta de ahi haces el "decremento" en las demas.
Puede ser algo asi:
Código PHP:
$result = mysql_query("SELECT orden FROM orden ORDER BY orden ASC");
$ids = array();
while( $row = mysql_fetch_row( $result ) ) {
$ids[] = $row[0];
}
$start = $ids[0];
foreach( $ids as $id ) {
$cmp = $id;
if( $cmp != $start ) {
mysql_query( "UPDATE orden SET orden=orden-1 WHERE orden>$cmp" );
$start = $cmp;
}
}
Puedes empezar con algo como eso, aunque creo se romperia un poco la atomicidad de los datos..
Saludos.