私はMySQLを使用しています。私は手動で行の優先順位/順序を並べ替えることができる必要があるテーブルがあります。私はもともと、各行に任意の順序(1,2,3など)を割り当ててから、その行を移動させて順序を「入れ替える」ことを考えていましたが、これを実行する最善の方法ではないと思います。ソート順/優先順位を保存する最も良い方法は?
ここで関連する質問(like this one)を読んだ後、多くの人がidカラム(id * 1000)に基づいて優先カラムに値を割り当てると言っています。行を再配置するには、列の差を除算/減算します。私はこの仕組みがどういうものか分かりません。
これは、並べ替える必要があるテーブルのレイアウトです。
CREATE TABLE liability_detail (
id int NOT NULL AUTO_INCREMENT,
analysis_id int NOT NULL, //(many-to-one relationship with analysis table)
other_columns various datatypes
sequence int DEFAULT 0
)
私はセットアップに私は簡単にすべてを管理するために多くのコードを記述することなく、それらを並べ替えることができるように、行の優先順位を管理するための簡単な方法をしたいと思います。
もう少し詳しく説明すると、スワップまたは更新される「優先」列などのこのようなトリックなしでこれに答えることは可能でしょう。優先順位計算の計算式をレイアウトできますか? 「行を動かす」の背後にある理由は何ですか?私は適切な 'ORDER BY'を生成することが可能かもしれないと思う。 –
リンクリストアプローチを考えてみよう。これにより、リスト内で行を上下に移動するときに、他のすべての行を更新する必要がなくなります。リンクされたリストでは、最大で3行(移動しているものを含む)だけを更新する必要があります。もちろん、それに対して照会するのは難しいので、おそらくコード内でのみ命令を実装するでしょう。 –
このアプリケーションは、顧客に対して財務分析を実行します。私たちのユーザーは、財務を最上位に移動し、優先順位の低い財務を最下位に移動することによって、いくつかの財務の優先順位付けが可能である必要があります。 ORDER BYを使用して自動ソートを実行するにはあまりにも多くの要因があるため、このプロセスは手動です。場合によっては、行を中央から上に移動する必要があり、場合によっては2番目の行を下に移動する必要があります。 – Jeff