sql >> データベース >  >> RDS >> Sqlserver

データベーステーブルのソート順列の使用

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

    時間の経過とともに、注文の「スペース」はどんどん大きくなりますが、それでも「並べ替え」られます

    これにより、変更される値とその後のすべての値に1が追加されますが、上記のステートメントは引き続き当てはまります。ますます大きな「スペース」が順番に形成され、INT値を超える可能性があります。

    スペースがないことを望む代替ソリューション:

    次のプロシージャを想像してみてください:@ NewOrderVal、@ IDToChange、@ OriginalOrderVal

    のパラメータを持つUpdateSortOrder

    新しい/古い注文が並べ替えを上または下に移動しているかどうかに応じて、2つのステップのプロセス。

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

    ベストプラクティスについて;私がこれまで行ってきたほとんどの環境では、通常、カテゴリ別にグループ化してアルファベット順に並べ替えたり、「販売中の人気」に基づいて並べ替えたりする必要があるため、ユーザー定義の並べ替えを提供する必要はありません。



    1. PostgreSQLで先行ゼロを追加する2つの方法

    2. SQLServerのワード関数に数値を書き込む方法

    3. UptimeInfrastructureMonitorを使用してデータベースのパフォーマンスを追跡します

    4. Oracle番号形式の不要な先頭の空白スペース