2009-07-29 6 views
1

10年間、私たちはテーブルで同じカスタムソートを使用していました。レプリケーション/公開日を持つようにして、レプリケーションに不要なエントリを複製させたくないのです。私はネストされたセットを見ていましたが、私たちのために仕事をしていないようです。シバン全体をソートせずにテーブルを並べ替える

ベーステーブル:

id | a_sort 
---+------- 
1 10 
2 20 
3 30 

挿入した後:第2の位置に

insert into table (a_sort) values(15) 

エントリー。少なくともIDを更新し、

select * from table order by a_sort 

と全てa_sortエントリを頼る=(2,3,4)コースの
意志所望の出力を生成する:

id | a_sort 
---+------- 
1 10 
2 20 
3 30 
4 15 

とテーブルオーダー。

id | a_sort 
---+------- 
1 10 
4 20 
2 30 
3 40 

列名、列数、データ型、可能な結合、可能なトリガーまたは方法問題は無関係です。また、この作業をすばやく行うためのきれいな方法がいくつか見つかりました。

のみ;どのように私たちは1または2最大にDBの更新を減らすことができます。

非常によくある問題のようです。

私は明らかにa_sort float(53)を使用し、ordervaluefirstentry + abs(ordervalue最初のordervaluenextentry)/ 2の固定値を使用して挿入します。

+0

これは、新しいタグをクラックするのですか? – skaffman

+0

は非常にまれに使用される新しいタグですか? –

+0

最高の種類!! – skaffman

答えて

0

あなたは本当にあなたがこのデータをやっていることを説明するので、これがあれば私を許していなかった); -
しかし、これが唯一のエントリ「の間に」1040の周りにできるようになるので決して頼らないは少し問題と思われますあなたの状況に夢中なアイデア:

あなたは値の列の代わりに '次の最高値'のIDの列を持つ「リンクされたリスト」の並べ替えを行うことができます。これは、2

の最大のアップデートの数を減少させるであろうあなたはそれが二重にリンクさせるとも参照してください。3.

へのアップデートの最大数をもたらすことになる、次の最低の列を持つことができます をhttp://en.wikipedia.org/wiki/Linked_list

+0

リンクされたリストをids(common in oop)と一緒に使用すると、再帰的select文に問題があり、順序付きデータを取得できませんでした。どのようにSQL(-92)文を書くでしょうか? –

+0

クライアント側で簡単にソートすることができます。最初にヌルを取得するようにリンク列で順序を選択します(二重にリンクされていると仮定した場合、ヘッドノードが必要です)。私はあなたが更新のためのクライアント側でとにかくソートしていると仮定します。ストアドプロシージャを使用して実行することもできます。 – Charlie

関連する問題