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

Brug af en sorteringsrækkefølgekolonne i en databasetabel

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

Selvom du over tid vil få større og større "mellemrum" i din ordre, men den vil stadig "sortere"

Dette vil tilføje 1 til den værdi, der ændres, og hver værdi efter den i én erklæring, men ovenstående sætning er stadig sand. større og større "mellemrum" vil dannes i din ordre, der muligvis kommer til det punkt, hvor en INT-værdi overskrides.

Alternativ løsning givet ønske om ingen mellemrum:

Forestil dig en procedure for:UpdateSortOrder med parametrene @NewOrderVal, @IDToChange,@OriginalOrderVal

Totrinsproces afhængig af om ny/gammel ordre bevæger sig op eller ned i sorteringen.

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

Med hensyn til bedste praksis; de fleste miljøer, jeg har været i, vil typisk gerne have noget grupperet efter kategori og sorteret alfabetisk eller baseret på "popularitet på udsalg", hvilket afviser behovet for at give en brugerdefineret sortering.



  1. Forstå indekser i MySQL:Anden del

  2. Tilføjelse af flere datalagre til Microsoft Power BI

  3. bbPress:Sådan finder du kortlægninger af vedhæftede filer til deres respektive indlæg

  4. Få databasepatchsets