sql >> Database >  >> RDS >> Sqlserver

Een sorteervolgordekolom gebruiken in een databasetabel

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

Hoewel je na verloop van tijd steeds grotere "ruimtes" in je bestelling krijgt, maar het zal nog steeds "sorteren"

Dit voegt 1 toe aan de waarde die wordt gewijzigd en elke waarde erna in één instructie, maar de bovenstaande instructie is nog steeds waar. grotere en grotere "spaties" zullen zich in uw bestelling vormen en mogelijk op het punt komen een INT-waarde te overschrijden.

Alternatieve oplossing gegeven wens voor geen spaties:

Stelt u zich een procedure voor:UpdateSortOrder met parameters van @NewOrderVal, @IDToChange,@OriginalOrderVal

Tweestapsproces, afhankelijk van of de nieuwe/oude volgorde omhoog of omlaag gaat.

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

Met betrekking tot beste praktijken; de meeste omgevingen waarin ik ben geweest, willen meestal iets gegroepeerd op categorie en alfabetisch gesorteerd of op basis van "populariteit in de uitverkoop", waardoor de noodzaak om een ​​door de gebruiker gedefinieerde sortering te bieden teniet wordt gedaan.



  1. Een willekeurig getal genereren binnen een opgegeven bereik in SQLite

  2. Oracle In-Memory kosten

  3. Wat is ODBC?

  4. Databasemodellen baseren op de realiteit:de uitdaging van een blogger