1

環境

写真を保存するための小さなWebアプリに取り組んでいます。写真はタイムスタンプ (撮影日) に従って並べ替えられ、うまく機能しています。データベースの簡単な外観を次に示します。

+--------------+-------------------+
|      id      |     timestamp     |
+--------------+-------------------+
|       1      |    1000000003     |
|       2      |    1000000000     |
+--------------+-------------------+

次に、写真を並べ替える機能を追加したいと思います。そして、欠点なしでそれを行う方法を見つけることはできません。

私がしたこと

カスタム オーダーを保存するために、最初にテーブルに列を追加しました。

+--------------+-------------------+-------------+
|      id      |     timestamp     |    order    |
+--------------+-------------------+-------------+
|       1      |    1000000003     |      1      |
|       2      |    1000000000     |      2      |
+--------------+-------------------+-------------+

最初の問題: 2 つの異なる基準に従って写真を注文することはできないと思います。

だから私はorder列を使ってそれらを注文していますが、これだけです。列を追加したときorder、現在の順序が維持されるように、各写真に値を指定しました。orderさんが注文したときと同じ順序で、 さんが注文した写真がありtimestampます。

一部の写真を手動で並べ替えることができるようになりましたが、他の写真はその場所にとどまります。最初の問題は解決されました。

しかし、今、私は新しい写真を追加したいと思います。

2 番目の問題:追加しようとしている新しい写真がいつ撮影されたかはわかっていますが、私の写真はもはやその写真の順序で並べられていtimestampません。この写真は正しく並べる必要があるため、正しいorder値が必要です。

これが問題です:正しい order値です。

新しい写真を処理するには、次の 2 つの方法があります。

  • order他のものよりも大きな価値を与えてください。前の表では、新しい写真が表示されorder = 3ます。タイムスタンプが考慮されていないため、これは明らかに悪い考えです。最近の写真は最後に表示されます。
  • タイムスタンプに従って、所属する場所に「挿入」します。同じテーブルを見て、新しい写真のタイムスタンプが だった場合、1000000002新しい写真は になりorder = 2order次のすべての写真の は 1 ずつ増えます。

2 番目の解決策は素晴らしいように見えますが、1 つのケースを除いて: 写真 #2 の順序が手動で 50 などに変更された場合、新しい写真はorder = 50最初の写真に属していても (タイムスタンプに従って) 与えられます。

必要なもの

私が必要としているのは、タイムスタンプ手動で設定された順序に従って写真を並べ替える方法です。

強調した2 番目の問題に対する解決策があるかもしれませんし、これに対処するためのまったく別の方法を知っているかもしれません。いずれにせよ、あなたの助けに感謝します。

4

1 に答える 1

0

あなたの質問のどの時点でも、コンピューターやプログラミング言語について言及していません。これは問題ありません (実際には、これは良いアプローチであり、コーディングの前に問題と解決策を紙に書き出すことです)。コンピューターとプログラミング言語も無視する回答を次に示します。

すべての写真を撮影順に靴箱に入れます。

ここで、3 枚の紙を用意します。

1 ページ目に、1 から N (ボックスに収納できる写真の数) までの数字 (1 行に 1 つ) を書きます。ボックスに写真を入れるときはいつでも、ボックス内の順序に対応する行にそのタイムスタンプを記入してください。

2 ページ目で、写真 1 のタイムスタンプを数行下に書きます。同じ行に 1 を書き込みます。次の写真については、そのタイムスタンプを紙の適切な場所に書き、将来の写真の挿入に必要と思われるだけ上下に余白を残します。同じ行に 2 を書きます。すべての情報を新しいバージョンのページにコピーして挿入用のスペースを増やす必要がある場合は、行間のスペースがなくなるまで続けます。このページの情報は 1 ページの情報と同じですが、各行の 2 つの数字の位置が入れ替わっています。

3 ページに 1 から N までの数字をもう一度書きます。各写真を集めたら、手動で設定した順序の正しい位置に、1 ページ目からその番号 (つまり、すべての写真番号のシーケンス内の番号) を書きます。後発者をこのページの上位に挿入する必要があると判断したため、おそらくこのページで多くの修正と書き直しを行う必要があります。

これで次のことができます。

  • あなたの写真の店、靴箱。一度に複数の注文で写真を保存することはできないことにすでに気付いているはずです。
  • 3 つのインデックス (必要に応じてインデックス); 1 つ目は固定されており、各写真に一意のシーケンス番号を割り当てるだけです。ボックス内の各写真のタイムスタンプも表示されます。
  • 2 番目のインデックスを使用すると、タイムスタンプを指定して写真の一意のシーケンス番号を見つけ、靴箱で写真を見つけることができます。
  • 3 番目のインデックスでは、必要に応じて写真を注文できます。各行の最初の番号はソート順のシーケンス番号で、2 番目の番号は最初のインデックスからの写真の一意のシーケンス番号です。

これはすべて非常に長々とした言い方です。(靴箱やコンピューター化されたデータ ストアのいずれかで) 複数の注文の写真を同時に保持することはできないため、必要な注文のインデックスを維持する必要があります。使用する。これらのインデックスは、直接的または間接的に、数値から靴箱内の場所を指します (これがインデックスの機能です)。

于 2012-09-30T15:22:37.157 に答える