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

データベース内のレコードのグループに並べ替え順序を格納するための最も効率的な方法は何ですか?

    integerを使用するのはどうですか 順序を定義する列?デフォルトでは、1000、2000、3000などの番号* 1000を割り当て、3000を1000から2000の間で移動すると、1500に変更します。したがって、ほとんどの場合、他の番号を更新する必要はありません。私はこのアプローチを使用し、それはうまく機能します。 doubleを使用することもできます ただし、精度と丸め誤差を制御できないため、使用しないでください。

    したがって、アルゴリズムは次のようになります :BをAの後の位置に移動するとします。最初にselectを実行して、Aの隣のレコードの順序を確認します。Aの順序より少なくとも+2高い場合は、Bの順序を間に合わせるように設定します。ただし、それが+1だけ高い場合(Aの後にスペースがない場合)、Bの境界レコードを選択して、この側にあるスペースの量を確認し、2で除算してから、この値をA間のすべてのレコードの順序に追加します。とB.それだけです!

    (複数のクエリを含むアルゴリズムにはトランザクション/ロックを使用する必要があることに注意してください。これはこの場合にも当てはまります。最も簡単な方法はInnoDBトランザクションを使用することです。)



    1. Laravelの移行:指定されていても、一意のキーが長すぎます

    2. mysqlでgroupbyを使用して最後の値のみを選択します

    3. SQLiteの既存のテーブルに外部キーを追加する

    4. プロアクティブなSQLServerヘルスチェック、パート3:インスタンスとデータベースの設定