0

私のサイトには、ユーザーが行を並べ替えることができるテーブルがあります。この部分はjQueryUIで簡単に実行でき、$('#sortable').sortable("serialize")メソッドを使用して新しい順序を取り戻すのは簡単です。私の質問は、1つのアイテムの順序を変更するとテーブル内のすべてのレコードが変更されるため、これらすべてのレコードをデータベースに保存する最も効率的な方法は何ですか?IDに基づいて行ごとに新しいステートメントを作成できることは知っていUPDATEますが、もっと良い方法が必要だと感じています。ある?

MySQLとASP.NETを使用しています。

4

3 に答える 3

3

コマンドを使用しSTART TRANSACTIONます。これははるかに高速です。

于 2010-12-06T19:05:30.033 に答える
1

潜在的に任意の数の行があることを考えると、ユーザー設定テーブルにテキスト文字列エントリとして順序を保存します(そのようなテーブルがあると仮定します)。基本的に、デフォルトはnullエントリ(ディスクスペースを節約するため)です。これは、順序がデータベース内の順序から変更されていないことを意味し、ユーザーが変更した場合は、行の順序をシリアル化できます(つまり、最初に15行目、次に19行目、次に3行目がある場合は、15-19-3)を作成して、それを読み取ることができます。これは単一の更新であり、無期限にスケーリングされます(テキスト文字列の長さまでですが、とタイプにとってはかなり大きな問題です)。mediumtextlongtext


他の人に当てはまる場合に備えて上記を残しておきますが、以下に説明する特定のケースでは、設定をテキストファイルに保存することを検討すると思います。とにかく順序がユーザーに表示されることを考えると、設定がプレーンテキストファイルにあることにセキュリティ上のリスクはなく、全体を非常に迅速に書き直すことができます。以下で説明する方法を考えると、2列のCSVファイルを使用しますが、明らかに設定することもできますが、最も理にかなっています。

ファイルの読み取り速度をすばやく検索すると、関数に関するこのコメントfile_get_contents()が表示されます。これは、ファイル内のデータにアクセスするために使用する方法を検討するときに、ファイルのサイズに注意を払うことをお勧めします。私は書くことについて知りません。

于 2010-12-06T20:16:41.500 に答える
0

あなたの質問は、少なくとも私にとっては明確さが欠けています。ID〜rankで参照するエントリをいくつか示していると思います。例えば:

5~1
6~2
7~3
1~4
24~5
2~6

ここで、「1つのアイテムの順序によって、テーブル内のすべてのレコードが変更される」と言います。これはあなたのデザインで本当に必要ですか?ユーザーがid-s1と24の要素を切り替えると、次のシリアル化されたリストが作成されます。

[5~1],[6~2],[7~3],[24~5],[1~4],[2~6]

このリストを繰り返すことで、実際に更新する必要のある行を簡単に判断できます(これはランクの自然な順序と一致しません)。

私の例では、6つではなく2つの更新クエリを実行する必要があります。

update XYZ set rank=4 where id = 24;
update XYZ set rank=5 where id = 1;

乾杯!

于 2010-12-06T20:28:47.113 に答える