sql >> Databáze >  >> RDS >> Sqlserver

Použití sloupce pořadí řazení v databázové tabulce

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

I když postupem času budete v objednávce získávat větší a větší "mezery", ale stále se "třídí"

To přidá 1 ke změněné hodnotě a každé hodnotě za ní v jednom příkazu, ale výše uvedený příkaz je stále pravdivý. ve vaší objednávce se budou tvořit větší a větší "mezery", které mohou překročit hodnotu INT.

Alternativní řešení při požadavku na žádné mezery:

Představte si postup pro:UpdateSortOrder s parametry @NewOrderVal, @IDToChange,@OriginalOrderVal

Proces ve dvou krocích v závislosti na tom, zda se nová/stará objednávka pohybuje v řazení nahoru nebo dolů.

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

Pokud jde o osvědčené postupy; většina prostředí, ve kterých jsem byl, obvykle požaduje něco seskupené podle kategorií a seřazené podle abecedy nebo na základě "oblíbenosti v prodeji", čímž se neguje potřeba poskytovat uživatelem definované řazení.



  1. Název tabulky jako parametr funkce PostgreSQL

  2. Kontrola verzí PostgreSQL s Atlassian Bitbucket

  3. Jak vytvořit pivotní dotaz na serveru SQL bez agregační funkce

  4. Jak uložit a načíst bajtové pole (obrázková data) do az databáze SQLite?