sql >> Base de Datos >  >> RDS >> Sqlserver

Usar una columna de orden de clasificación en una tabla de base de datos

Update product set order = order+1 where order >= @value changed

Aunque con el tiempo obtendrá "espacios" cada vez más grandes en su pedido, aún se "ordenará"

Esto agregará 1 al valor que se está cambiando y todos los valores posteriores en una declaración, pero la declaración anterior sigue siendo cierta. Se formarán "espacios" cada vez más grandes en su pedido, posiblemente llegando al punto de exceder un valor INT.

Solución alternativa dado el deseo de no tener espacios:

Imagine un procedimiento para:UpdateSortOrder con parámetros de @NewOrderVal, @IDToChange,@OriginalOrderVal

Proceso de dos pasos dependiendo de si el pedido nuevo/antiguo se está moviendo hacia arriba o hacia abajo.

If @NewOrderVal < @OriginalOrderVal --Moving down chain 

--Create space for the movement; no point in changing the original 
    Update product set order = order+1 
    where order BETWEEN @NewOrderVal and @OriginalOrderVal-1;

end if

If @NewOrderVal > @OriginalOrderVal --Moving up chain

--Create space  for the momvement; no point in changing the original  
  Update product set order = order-1 
  where order between @OriginalOrderVal+1 and @NewOrderVal
end if

--Finally update the one we moved to correct value

    update product set order = @newOrderVal where [email protected];

En cuanto a las mejores prácticas; la mayoría de los entornos en los que he estado generalmente quieren algo agrupado por categoría y ordenado alfabéticamente o según la "popularidad en venta", lo que anula la necesidad de proporcionar una clasificación definida por el usuario.