Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Utilizzo di una colonna di ordinamento in una tabella di database

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

Anche se nel tempo otterrai "spazi" sempre più grandi nel tuo ordine, ma verrà comunque "ordinato"

Ciò aggiungerà 1 al valore che viene modificato e ogni valore successivo in un'unica affermazione, ma l'affermazione sopra è ancora vera. nel tuo ordine si formeranno "spazi" sempre più grandi arrivando eventualmente al punto di superare un valore INT.

Soluzione alternativa data la mancanza di spazi:

Immagina una procedura per:UpdateSortOrder con parametri di @NewOrderVal, @IDToChange,@OriginalOrderVal

Processo in due fasi a seconda se il nuovo/vecchio ordine si sta spostando verso l'alto o verso il basso nell'ordinamento.

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];

Per quanto riguarda le migliori pratiche; la maggior parte degli ambienti in cui sono stato in genere desidera qualcosa raggruppato per categoria e ordinato in ordine alfabetico o in base alla "popolarità in vendita", annullando così la necessità di fornire un ordinamento definito dall'utente.