1

データベース テーブルの各行に検索語に関する情報が含まれているとします。この表には、検索用語が Web サイトに表示される順序を示す整数の「ランク」列があります。

この順位を実装して維持するにはどうすればよいですか?

私が避けたい問題は、単語に 1、2、3、4、..、100 の番号を付けることです。たとえば、ランク 50 が突然興味深いものになると、新しいランクが 1 に設定され、それらの間のすべての単語にソート番号が 1 つ増えました。

確かに、最初のソート番号を 100、200、300、400 などに設定すると、動き回るためのスペースがいくらか残されますが、ある時点で壊れます。

別のアプローチは、固定オフセットでランクの間隔を空けることですが、実際のシナリオではいつか壊れることもあります。

これを処理するための他の別のアプローチはありますか....(検索エンジンがランキングと並べ替えを維持する方法に関連している可能性がありますが、運がわかりません)

4

1 に答える 1

0

どうですか、このアイデア。キューのように。

追加のテーブルを作成しますTask(id, new_rank, ...)。挿入時にメイン テーブルのトリガーを作成します。

新しい行がメインテーブルに挿入されるようになったら、次を実行します。

  1. man テーブルへの新しい行の挿入を禁止します。
  2. テーブルに新しい行を挿入しTaskます。

たとえば、次のストアド プロシージャを 1 時間ごとに実行します。

  1. Taskカーソル内のテーブルからすべての新しい行を選択します。
  2. ループ中:

    2.1. メインテーブルでランクの増加(準備)を実行します(新しい行ランク値を挿入できるようにするため)。

    2.2. man テーブルに新しい行を挿入します。

    2.3. から行を削除しTaskます。

トランザクションで 2.1-2.3 の項目を実行する必要があるかもしれません。

于 2014-01-21T10:57:20.990 に答える