2

最近の私の好奇心の1つは、いくつかの投稿を注文する方法です。私はあなたに明確な例をあげます、多分あなたの大多数が過去に実験したものの1つです。

Facebookタイムライン。いつでも好きなときに投稿やイベントを追加できます。この場合、投稿は日付順に並べられていると思います。過去の新しいステータスを追加するときは、日付を割り当てる必要があるため、簡単に並べ替えることができます。

私がやりたいのは、投稿と、特定の投稿の後に新しい投稿を追加するオプションを用意することです。日付を追加するオプションはありませんが、その順序で日付を追加する方法が必要です。

したがって、すべての投稿にIDと日付(作成日)がある場合。2つの投稿の間に新しい投稿が追加された場合、「上位」の投稿のすべてのIDをインクリメントできないため、IDで並べ替えることができます。将来、2つの古い投稿の間に投稿を追加できるため、日付も日付ではありません。

これに対してどのような解決策を想像しますか?どの基準で注文する必要がありますか(必要に応じてデータベーススキームを変更する準備ができています)?

4

2 に答える 2

1

基準 (Dateなど) で注文しない場合は、それらを注文するための何かが必要になります。順序付けに列 ID を使用する必要はありません。 ではない列を追加してPK、 の関数を作成できordinalPositionます。

したがって、最後に挿入すると、 max が取得され、ordinalPosition次に ordinalPosition+1 が実行されます。それらのうちの 2 つの間に挿入する場合は、(それらの間に挿入するために) 2 つの投稿の序数の位置を調べ、これら 2 つの投稿のメジャーからすべての ordinalColumns を 1 ずつインクリメントして更新します。の「穴」ordinalPosition)、新しい ordinalPosition を挿入します。これは、それらの 2 つの投稿のマイナー + 1 (これらの 2 つの投稿の市長) になります。

次に、ordinalPosition で並べ替えられた投稿を取得します。

    Select fields from Posts 
 -- where  your criteria goes here
    order by ordinalPosition

2 つの別の投稿の間に投稿を挿入するたびに更新を行う必要があるため、これは良い方法ではないと考えるかもしれませんが、DB は魔法ではなく、いくつかの基準に従って順序付けする必要があります。そして、同じ注文IDの投稿がないことを確認する必要があるため、おそらく、必要に応じていくつかの一意の制約または何かを追加する必要があります. おそらく非常に古い投稿を更新するつもりはないので、他の2つの投稿の間に投稿を追加するたびにそれほど多くの更新が行われるとは思いません.

于 2012-08-25T14:31:30.783 に答える